【发布时间】:2014-08-05 00:47:22
【问题描述】:
我正在测试代码,我构建了两个 uiviewcontroller ,A , B 并使用导航。
当我点击 A Button 时,它将导航到 B UIviewController。
但是我需要点击导航栏上的返回按钮,它会传递一个值返回给A uiviewcontroller。
但是当我点击返回按钮时没有找到选择器。日志仍然显示 0。
我的 AViewController 标头如下:
#import <UIKit/UIKit.h>
#import "BViewController.h"
@interface AViewController : UIViewController<BViewControllerDelegate>
-(void) bViewController:(BViewController *)childViewController sendBackPassValue:(NSString *)value;
@end
AViewController 实现文件如下:
#import "BViewController.h"
...
-(void) bViewController:(BViewController *)childViewController sendBackPassValue:(NSString *)value
{
NSLog(@"Back Value: %@", value );
}
...
B View Controller 头文件如下:
#import <UIKit/UIKit.h>
@class BViewController;
@protocol BViewControllerDelegate <NSObject>
-(void) bViewController:(BViewController*) childViewController sendBackPassValue:(NSString*) value;
end
@interface BViewController : UIViewController
@property (strong,nonatomic) NSString *passValue;
@property (weak, nonatomic) id<BViewControllerDelegate> delegate;
@end
B 视图控制器实现文件如下: #import "BViewController.h" #import "AViewController.h"
...
- (void)viewDidLoad
{
[super viewDidLoad];
_passValue = @"my pass value";
UIBarButtonItem *newBackButton = [[UIBarButtonItem alloc] initWithTitle:@"Home" style:UIBarButtonItemStyleBordered target:self action:@selector(home:)];
self.navigationItem.leftBarButtonItem=newBackButton;
}
-(void)home:(UIBarButtonItem *)sender {
NSLog(@"home button click");
NSLog(@"[_delegate respondsToSelector:@selector(bViewController:sendBackDateTime:)]:%d",[_delegate respondsToSelector:@selector(bViewController:sendBackPassValue:)]);
if( [_delegate respondsToSelector:@selector(bViewController:sendBackPassValue:)])
{
NSLog(@"sendBackPassValue");
[_delegate bViewController:self sendBackPassValue:_passValue];
}
[self.navigationController popToRootViewControllerAnimated:YES];
}
...
但是
NSLog(@"[_delegate respondsToSelector:@selector(bViewController:sendBackDateTime:)]:%d",[_delegate respondsToSelector:@selector(bViewController:sendBackPassValue:)]);
仍然是 0。
有谁知道我少了哪一步?
非常感谢。
--回答--
在 AUIViewcontroller.m 中添加此代码
它可以触发委托。
-(void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
BViewController *nextVC = segue.destinationViewController;
nextVC.delegate = self;
}
【问题讨论】:
-
A创建B时,是否设置
delegate属性?贴出 A 创建并显示 B 的代码。 -
对不起,我忘记提交代码了。我已经更新了 git。谢谢
-
你没有回答我的问题。您是否设置了
delegate属性?使用创建和显示 B 控制器的代码更新您的问题。不要让人们在其他地方访问您的代码。它属于问题。 -
谢谢 rmaddy。我解决问题。设置一个 Viewcontroller 委托,它可以显示日志值 1。
标签: ios xcode navigation