我在一个 View Controller 中有三个导航按钮,其中两个我在本地处理,一个启动编辑 View Controller 。我创建了一个从第一个 UITableView 的主体到目标 View Controller (编辑 View Controller )的导航 Controller 的 segue。 该按钮工作正常(即启动编辑 View )但它没有收到我发送给它的字符串。有人可以帮忙吗?我已经尝试了针对其他相关问题的所有建议,但似乎无法解决这个问题。以下是相关代码。
源 Controller .h:
#import <UIKit/UIKit.h>
#import "EQHorseAddViewController.h"
#import "EQDatabase.h"
@interface EQHorseDetailViewController : UITableViewController
@property (strong, nonatomic) EQHorseAddViewController *addViewController;
源 Controller .m:
#import "EQHorseDetailViewController.h"
@interface EQHorseDetailViewController ()
@end
@implementation EQHorseDetailViewController
@synthesize addViewController;
-(void)viewDidLoad
{
[super viewDidLoad];
UIBarButtonItem *deleteItem= [[UIBarButtonItem alloc]
initWithBarButtonSystemItem:UIBarButtonSystemItemTrash
target:self
action:@selector(deleteHorse:)];
UIBarButtonItem *editItem = [[UIBarButtonItem alloc]
initWithBarButtonSystemItem:UIBarButtonSystemItemEdit target:self
action:@selector(editHorse:)];
NSArray *actionButtonItems = [[NSArray alloc] initWithObjects:deleteItem, editItem,
nil];
self.navigationItem.rightBarButtonItems = actionButtonItems;
}
-(void)editHorse:(id)sender
{
NSLog(@"EditingHorse");
self.addViewController= [[EQHorseAddViewController alloc] init];
addViewController.resultSegue = @"Edit Horse Details";
[self performSegueWithIdentifier:@"EditHorseDetails" sender: self];
}
目标 View Controller .h:
#import <UIKit/UIKit.h>
#import "EQHorseDetailsInfo.h"
#import "EQDatabase.h"
@class EQHorseAddViewController;
@protocol EQHorseAddViewControllerDelegate <NSObject>
- (void) eqHorseAddViewControllerDidCancel:(EQHorseAddViewController *)controller;
- (void)eqHorseAddViewControllerDidSave: (EQHorseAddViewController *)controller;
@end
@interface EQHorseAddViewController : UITableViewController
<EQHorseAddViewControllerDelegate>
@property (strong, nonatomic) EQHorseAddViewController *addViewController;
@property (nonatomic, weak) id <EQHorseAddViewControllerDelegate> delegate;
@property (strong,nonatomic) NSString *resultSegue;
目标 View Controller .m
#import "EQHorseAddViewController.h"
#import "EQDatabase.h"
#import "EQHorseDetailsInfo.h"
@interface EQHorseAddViewController ()
@end
@implementation EQHorseAddViewController
@synthesize resultSegue;
- (void)viewDidLoad
{
NSLog(@"resultSegue %@",resultSegue);
}
在此先感谢您。
最佳答案
看起来您指的是 editHorse:
中的代码,它分配一个 EQHorseAddViewController
并在其上设置一个属性。该代码的问题在于它分配的 View Controller 与 segue 的 vc 目的地无关。该方法只是创建一个 vc,然后立即将其丢弃。
删除分配并改为执行 prepareForSegue:
。传递给该方法的 segue 对象将有一个名为 destinationViewController
的属性。那是即将被推送到导航上的 View Controller 。这是您应该设置 resultSegue
属性的那个。
-(void)editHorse:(id)sender
{
NSLog(@"EditingHorse");
[self performSegueWithIdentifier:@"EditHorseDetails" sender: self];
}
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
if ([segue.identifier isEqualToString:@"EditHorseDetails"]) {
EQHorseAddViewController *vc = segue.destinationViewController;
vc.resultSegue = @"Edit Horse Details";
}
}
关于ios - 使用 "performSegueWithIdentifier"发送值时目标值为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21947024/