美好的一天! 这是一个问题:我在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:)];
}
}
}
}
}
这不起作用。有什么想法吗?
答案 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];
}