如何在单元子视图中查找按钮

时间:2014-01-21 12:38:24

标签: ios uitableview uibutton

美好的一天! 这是一个问题:我在UITableView的单元格中添加了一个按钮,如下所示:

 UIButton *button = [[UIButton alloc] initWithFrame:buttonFrame];

[button setImage:[UIImage imageNamed:@"Button_off_weather"] forState:UIControlStateNormal];

button.tag = indexPath.row;

[button addTarget:self action:@selector(buttonCityTapped:) forControlEvents:UIControlEventTouchUpInside];
[cell addSubview: button];

它工作正常。 然后我想在表格中找到并关掉这样:

    NSMutableArray *cells = [[NSMutableArray alloc] init];
for (NSInteger j = 0; j < [_tableView numberOfSections]; ++j)
{
    for (NSInteger i = 0; i < [_tableView numberOfRowsInSection:j]; ++i)
    {
        [cells addObject:[_tableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:i inSection:j]]];

        for (UITableViewCell *cell in cells)
        {
            for (id theView in cell.subviews) {

                if ([theView isKindOfClass:[UIButton class]]) {
                    [theView performSelector:@selector(buttonOff:)];
                }

            }

        }
    }
}

这不起作用。有什么想法吗?

3 个答案:

答案 0 :(得分:3)

使用@property创建自定义单元格子类,使按钮可用。这是正确的方法。

您当前的方法目前将会出错并且将来会出错。尽量不要依赖遍历视图层次结构的代码,特别是如果您无法控制视图层次结构的某些部分(如单元格子视图)。

答案 1 :(得分:1)

使用枚举[cell.contentView subviews]

 for(UIView *view in [cell.contentView subviews])
    {
        if([view isKindOfClass:[UIButton class]])
        {
                        [theView performSelector:@selector(buttonOff:)];

        }
    }

答案 2 :(得分:0)

检查:对我来说没问题。

int sections = [self.tableView numberOfSections];
    for (int i=0; i<sections; i++) {
        //For the Custom cell 
        NSIndexPath *myIP = [NSIndexPath indexPathForRow:0 inSection:i] ;
        CellStar *cell =(CellStar *) [self.tableView cellForRowAtIndexPath:myIP];

        UITextView *txtVi ;

        NSArray *subviews = cell.contentView.subviews;

        for(id element in subviews) {
            if ([element isKindOfClass:[UITextView class]]){
                 NSLog(@"element is a UItextView\n");
                txtVi =  (UITextView *)element;

            }
            if([element isKindOfClass:[UIButton class]]){
                UIButton *btn = (UIButton *) element;

                 NSLog(@"element is UIButton\n");
            }
        }
        //[self.tableView reloadData];
    }