2016-01-21 3 views
3

У меня возникают проблемы, так как действие UIBarbuttonItem на UIToolBar не вызывается.
В следующем коде, хотя doneBtn на toolBar используется, действие doneBtnAction: не вызывается.
У вас есть идея исправить это?Действие UIBarbuttonItem на UIToolBar не называется

- (void)viewDidLoad { 
    UIPickerView *pickerView = [[UIPickerView alloc] init]; 

    UIToolbar *toolBar = [[UIToolbar alloc] initWithFrame:CGRectMake(0, -44, 320, 44)]; 
    UIBarButtonItem *doneBtn = [[UIBarButtonItem alloc] initWithTitle:@"Done" style:UIBarButtonItemStyleDone target:self action:@selector(doneBtnAction:)]; 
    UIBarButtonItem *flex = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil]; 
    toolBar.items = @[flex, doneBtn]; 
    [pickerView addSubview:toolBar]; 

    UITextField *textField = [[UITextField alloc] init]; 
    textField.inputView = pickerView; 
} 

- (void)doneBtnAction:(UIBarButtonItem *)sender { 
    NSLog(@"%@", sender); 
} 
+0

Вы видите, что «doneBtn» оживляет кран? Как 'toolBar' позиционируется внутри' pickerView'? – hatfinch

+0

Отладка иерархии представлений для фрейма 'UIPickerView',' UIToolbar', 'UITextField'. Надежда поможет вам – SeraZheng

ответ

4

Не добавить панель инструментов как подвид в представлении сборщика, особенно с отрицательным у происхождения (нет прикосновений не достигают панели, поскольку краны подрезаны к раме зрения сборщика).

Вместо этого сделайте панель инструментов inputAccessoryView текстового поля.

textField.inputAccessoryView = toolBar; 

Полный код:

- (void)viewDidLoad { 
    UIPickerView *pickerView = [[UIPickerView alloc] init]; 

    UIToolbar *toolBar = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 0, 320, 44)]; 
    UIBarButtonItem *doneBtn = [[UIBarButtonItem alloc] initWithTitle:@"Done" style:UIBarButtonItemStyleDone target:self action:@selector(doneBtnAction:)]; 
    UIBarButtonItem *flex = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil]; 
    toolBar.items = @[flex, doneBtn]; 

    UITextField *textField = [[UITextField alloc] init]; 
    textField.inputView = pickerView; 
    textField.inputAccessoryView = toolBar; 
} 

Еще одно замечание - Почему бы не использовать стандартную систему Done типа для кнопки элемента бруска?

+0

Эта проблема была решена благодаря вашей поддержке. Спасибо. –

Смежные вопросы