PickerView中的按钮无法运行iOS 7

时间:2013-10-08 05:46:42

标签: ios uipickerview

这是我的代码,我无法处理按钮选择器。

- (UIView *)pickerView:(UIPickerView *)pickerView
        viewForRow:(NSInteger)row
      forComponent:(NSInteger)component
       reusingView:(UIView *)view {

    if(view == nil) {
        view = [[[UIView alloc] init] autorelease];
    }

    [view setFrame:CGRectMake(0, 0, 320, 44)];
    UIButton *manageButton = (UIButton *)[view viewWithTag:TAG_MANAGE + row];
    UILabel *descTypeLabel = (UILabel *) [view viewWithTag:TAG_DESCTYPE_LABEL + row];
    if(manageButton == nil &&  row != 0) {

        //CGRect frame = CGRectMake(210, 7, 90, 30);
        CGRect frame = CGRectMake(0, 7, view.frame.size.width, 30);
        manageButton = [UIButton buttonWithType:UIButtonTypeCustom];
        manageButton.frame = frame;
        [manageButton setTitle:@"Manage" forState:UIControlStateNormal];
        [manageButton setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
        [manageButton setBackgroundImage:[[UIImage imageNamed:@"blackButton.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(8, 8, 8, 8)] forState:UIControlStateNormal];
        manageButton.tag = TAG_MANAGE + row;
        [view addSubview:manageButton];
    }
    if(descTypeLabel == Nil) {
        descTypeLabel = [[UILabel alloc] initWithFrame:CGRectMake(20, 0, 190, 44)];
        descTypeLabel.layer.borderColor = [UIColor greenColor].CGColor;
        descTypeLabel.layer.borderWidth = 1.0;
        descTypeLabel.backgroundColor = [UIColor clearColor];
        descTypeLabel.tag = TAG_DESCTYPE_LABEL + row;
        [descTypeLabel setText:[descTypes objectAtIndex:row]];
        [view addSubview:descTypeLabel];
        [descTypeLabel release];
    }
    [manageButton addTarget:self action:@selector(managePressed:) forControlEvents:UIControlEventTouchUpInside];

    return view;
}

-(void) managePressed:(UIButton *) sender {

    //This selector is not called on manage button tap!

}

2 个答案:

答案 0 :(得分:0)

我认为您应该在将manageButton添加到pickerView之前添加选择器 只需移动这行代码:

[manageButton addTarget:self action:@selector(managePressed:) forControlEvents:UIControlEventTouchUpInside];

在这行代码之前:

[view addSubview:manageButton];

我希望这会有所帮助。

答案 1 :(得分:0)

我找到了解决方案。显然,根据您的设计,有一个带有完成按钮的工具栏可能是不可取的,因此在UIPickerView单元格上添加“不可见”完成按钮的一个好方法是:

// Instantiate an UIImagePicker into your class
@interface myView () {
    UIPickerView *_picker;
}
@end

// alloc/init the picker of your class and a UITapGestureRecognizer
- (void)initPicker {
    _picker = [[UIPickerView alloc] init];
    [_picker addGestureRecognizer:[[UITapGestureRecognizer alloc] initWithTarget:self
                                                                          action:@selector(dismissPicker)]];
}

// method called when the user taps on the UIPickerView.
// The normal behaviour is to use the current selected row as the one wanted by the user.
- (void)dismissPicker {
    NSInterger selectedRow = [_picker selectedRowInComponent:0];
    // and now use the data and dismiss the picker the way you like the most
}

那是所有人; p