码迷,mamicode.com
首页 > 移动开发 > 详细

iOS 通知代理执行代理方式时,代理为nil的解决办法

时间:2015-01-20 06:12:32      阅读:188      评论:0      收藏:0      [点我收藏+]

标签:

1.下面代码是描述: 点击Toolbar上的按钮时,通知代理去调代理方法.

 1 - (void)didClickedToolbarBtn:(UIButton *)button
 2 {
 3     
 4     if ([self.delegate respondsToSelector:@selector(toolbar:didClickedButton:)]) {
 5         [self.delegate toolbar:self didClickedButton:button.tag];
 6     }
 7     self.selectButton.selected = NO;
 8     button.selected = YES;
 9     self.selectButton = button;
10     
11 }

2.不巧的是,此时delegate还没指定,也就是说delegate=nil,具体场景如下:

1>假设有个控制器,在控制器的viewDidLoad方法里实例化Toolbar,也就是调[ [ Toolbar alloc ] init ].在执行完init后才是 toolbar.delegate = self.

2>在Toolbar的init方法添加Toolbar的4个按钮,[self addToolbarButtonWithTitle:@"xxx" andTag:枚举类型].

3>要求默认点击第1个按钮,采用的方法是,在创建按钮时,校验toolbar.subview的数量,当数量为1时,执行 [self didClickedToolbarBtn:button]

 1 - (void)addToolbarButtonWithTitle:(NSString *)title andTag:(QKToolbarButtonType)toolbarButtonType
 2 {
 3     QKToolbarButton *button = [[QKToolbarButton alloc]init];
 4     button.tag = toolbarButtonType;
 5     
 6     [button setTitle:title forState:UIControlStateNormal];
 7     
 8     [button addTarget:self action:@selector(didClickedToolbarBtn:) forControlEvents:UIControlEventTouchDown];
 9 
10     [self addSubview:button];
11     
12     if (self.subviews.count == 1) {
13         [self didClickedToolbarBtn:button];
14     }
15 }

3.为了结局上文描述的delegate=nil的问题,可以采用下面的解决办法,在代理的set方法中调相应的方法

1 - (void)setDelegate:(id<QKToolbarDelegate>)delegate
2 {
3     _delegate = delegate;
4     QKToolbarButton *toolbarBtn = (QKToolbarButton *)[self viewWithTag:QKToolbarButtonTypeDefault];
5     [self didClickedToolbarBtn:toolbarBtn];
6     
7 }

 

iOS 通知代理执行代理方式时,代理为nil的解决办法

标签:

原文地址:http://www.cnblogs.com/oumygade/p/4235132.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!