2

无论如何控制UIButton状态(启用/禁用按钮UITableViewCell。我的问题是我UIButton的单元格是storyboard使用viewWithTag. 我已经花了很多时间来整理它,但没有运气。人们大多通过以编程方式为带有 cell 的按钮分配标签来解决问题indexPath

我知道该表将重用该单元格,但我只想问是否还有另一种解决我的问题的 hacky 方法。如果不可能,我可能必须以编程方式创建按钮。

4

3 回答 3

0

一种简单的方法是在您的视图控制器中保留一个 NSMutableArray 变量,并跟踪哪些单元格按钮被禁用/启用。并使用 UITableViewDataDelegate 方法:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

每次显示时设置按钮状态。和 UITableViewDelegate 方法:

– tableView:(UITableView *)tableView didEndDisplayingCell:(UITableViewCell *)tableViewCell forRowAtIndexPath:(NSIndexPath *)indexPath

写入数组。使用 indexPath 进行索引。

于 2013-10-11T19:22:31.663 回答
0

您可以遍历单元格的所有子视图并检查它们是否是isMemberOfClass用于获取按钮的 UIButton。如果您有多个按钮,则可以检查按钮的文本或唯一标识它的其他属性。那将是一种hacky方式。

于 2013-10-11T18:24:22.543 回答
0

你必须像这样制作一个自定义单元格:

自定义单元格.h

@protocol CustomCellDelegate <NSObject>

- (void)buttonPressed:(UIButton *)sender;


@end
#import <UIKit/UIKit.h>

@interface CustomCell : UITableViewCell

@property (weak, nonatomic) id<CustomCellDelegate> delegate;
@property (weak, nonatomic) IBOutlet UIButton *button;

- (IBAction)buttonPressed:(UIButton *)sender;
@end

CustomCell.m

#import "CustomCell.h"

@implementation CustomCell

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        // Initialization code
    }
    return self;
}

-(void)prepareForReuse{
    self.button.enable = YES;
}


- (IBAction)buttonPressed:(UIButton *)sender{
[self.delegate buttonPressed:sender];
}
@end

在 IB 中,您在 UITableView 中添加一个新的 UITableViewCell 并将它的类与您的新自定义单元格设置为“CustomCell”之类的识别 ID 将您的按钮添加到您的自定义单元格并连接插座,然后您修改您的 tableView:cellForRowAtIndexPath: like那:

-(UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
  {
static NSString *CellIdentifier=@"CustomCell";
CustomCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

 cell.delegate = self;

return cell;
}

- (void)buttonPressed:(UIButton *)sender{
sender.enable = NO;
}

您还必须在控制器的加热器文件中添加 CustomCellDelegate

于 2013-10-11T18:43:07.113 回答