今天在寫一個(gè) UIPickerView的時(shí)候,UIToolBar 上的 UIBarButtonItem的按鈕(Cancel,Done)點(diǎn)擊失效害幅,但那個(gè)選擇 PickerViewCell 中點(diǎn)擊確實(shí)有效的浅乔。
丑的 UIPickerView
大致代碼是這樣的
#pragma mark InitView
- (void)initSubViews {
// UIPicker
UIPickerView * pickerView = [[UIPickerView alloc] init];
pickerView.delegate = self;
pickerView.dataSource = self;
[self.view addSubview:pickerView];
[pickerView mas_makeConstraints:^(MASConstraintMaker *make){
make.bottom.and.left.and.trailing.mas_equalTo(@0);
}];
//UIToolBar
UIToolbar *toolBar = [[UIToolbar alloc] init];
[toolBar setBarStyle:UIBarStyleBlack];
// CancelItem把敢、SpaceItem纬黎、DoneItem
UIBarButtonItem *cancelItem = [[UIBarButtonItem alloc] initWithTitle:@"Cancel" style:UIBarButtonItemStylePlain target:self action:@selector(toolBarCanelAction)];
UIBarButtonItem *spaceItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:self action:nil];
UIBarButtonItem *doneItem = [[UIBarButtonItem alloc] initWithTitle:@"Done" style:UIBarButtonItemStyleDone target:self action:@selector(tooBarDoneAction)];
toolBar.items = @[cancelItem,spaceItem,doneItem];
[pickerView addSubview:toolBar];
[toolBar mas_makeConstraints:^(MASConstraintMaker *make){
make.top.and.leading.and.trailing.mas_equalTo(@0);
}];
}
#pragma mark UIPicker Delegate
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView {
return 1;
}
- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component {
return self.dataArray.count;
}
- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component {
return self.dataArray[row];
}
- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component {
NSLog(@"content === %@",self.dataArray[row]);
}
#pragma mark Private
- (void)toolBarCanelAction {
NSLog(@"Cancel");
}
- (void)tooBarDoneAction {
NSLog(@"Done");
}
#pragma mark Lazy
- (NSArray *)dataArray {
if (!_dataArray) {
_dataArray = @[@"One",@"Two",@"Three",@"Four"];
}
return _dataArray;
}
為什么上述的兩個(gè)點(diǎn)擊事件沒有效果呢鬓照?后來經(jīng)過一個(gè)提醒可能確實(shí)是 pickerView 中的 subView 影響了 toolBar 上按鈕的點(diǎn)擊事件颤难,改一下 toolBar 的父視圖
[self.view addSubview:toolBar];
[toolBar mas_makeConstraints:^(MASConstraintMaker *make){
make.leading.and.trailing.mas_equalTo(@0);
make.bottom.equalTo(pickerView.mas_top);
}];
ps: 改變 UIToolBar 主要的幾個(gè)顏色
// 改變 toolBar 背景顏色
toolBar.barTintColor = [UIColor grayColor];
// 改變 toolBar 中所有 Item 顏色
toolBar.tintColor = [UIColor yellowColor];
// 改變某個(gè)字體顏色
[cancelItem setTitleTextAttributes:@{NSForegroundColorAttributeName: [UIColor orangeColor]} forState:UIControlStateNormal];
另外我試過了在點(diǎn)擊TextField 的時(shí)候是 OK 的,不涉及父視圖這塊的影響斋枢,只要如下稍微做處理就 OK 啦温自。
textField.inputAccessoryView = toolBar;
textField.inputView = pickerView;
//Ps:當(dāng)然此處玄货,pickerView 是用 frame 創(chuàng)建的