標籤:
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>)delegate2 {3 _delegate = delegate;4 QKToolbarButton *toolbarBtn = (QKToolbarButton *)[self viewWithTag:QKToolbarButtonTypeDefault];5 [self didClickedToolbarBtn:toolbarBtn];6 7 }
iOS 通知代理執行代理方式時,代理為nil的解決辦法