【发布时间】:2015-05-21 10:35:47
【问题描述】:
基本上,我有两个 UIViewController,其中一个中有一些按钮。一旦用户触摸其中一个视图控制器中的按钮,我想在另一个视图控制器中触发一些操作。但它似乎无法以某种方式工作。基本上,“如果”条件是:
if (self.delegate && [self.delegate respondsToSelector:@selector(userDidTouchButtons:)])
{
[self.delegate userDidTouchButtons:self];
}
似乎不起作用,因为 [self.delegate respondToSelector] 总是错误的。
这是第一个视图控制器的 .h 文件,它有一些按钮。 #导入
@class RightSideMenuViewController;
@protocol RightSideMenuDelegate <NSObject>
- (void) userDidTouchButtons: (RightSideMenuViewController *) rightMenuViewController;
@end
@interface RightSideMenuViewController : UIViewController
@property (nonatomic, assign) id <RightSideMenuDelegate> delegate;
@end
这是第一个视图控制器的 .m 文件。
- (IBAction)badmintonClicked:(UIButton *)sender
{
if (self.delegate && [self.delegate respondsToSelector:@selector(userDidTouchButtons:)])
{
[self.delegate userDidTouchButtons:self];
}
}
这是第二个视图控制器的.m文件,这里我要根据第一个视图控制器中的按钮触发动作。
#import "RightSideMenuViewController.h"
@interface DiscoverTimelineTableViewController () <RightSideMenuDelegate>
@property (strong, nonatomic) RightSideMenuViewController *rightMeuViewController;
@end
- (void)viewDidLoad {
[super viewDidLoad];
self.rightMeuViewController.delegate = self;
}
#pragma mark - RIGHT MENU Delegate methods
- (void) userDidTouchButtons: (RightSideMenuViewController *) rightMenuViewController
{
NSLog(@"He touches me!!!");
}
【问题讨论】:
-
确保 self.rightMeuViewController this 在此行之前不为零 self.rightMeuViewController.delegate = self;
-
rightMeuViewController 在哪里初始化?
-
问题是你没有设置委托 self.rightMeuViewController.delegate = self;// 这将是 nil, , DiscoverTimelineTableViewController 是如何出现的,它是在导航或模态中呈现还是另一个选项卡?跨度>
-
@RaheelSadiq 其实我是用“SWRevealViewController”这个库来做侧边菜单的,而rightMenuViewController就是右边的侧边菜单。
标签: ios objective-c delegates uibutton protocols