在UITableViewCell中放置UIButton时,TitleLabel被破坏了

时间:2014-11-07 10:37:08

标签: ios objective-c uitableview uibutton

我有自定义UITableView的{​​{1}}。自定义单元格包含UITableViewCellUIButton

我在此观察到UILabel文字正如我预期的那样发生变化,但UILabel文字没有变化。

当我滚出屏幕外的按钮时,请更改UIButton的标签。

为什么它不起作用?我使用Xcode 6并使用下面的代码。


ViewController.h

UIButton

ViewController.m

#import <UIKit/UIKit.h>
#import "customTableViewCell.h"

@interface ViewController : UIViewController<UITableViewDelegate,UITableViewDataSource>

@property (weak, nonatomic) IBOutlet UITableView *tableView;

@end

customeTableViewCell.h

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    self.tableView.delegate = self;
    self.tableView.dataSource = self;
    [self.tableView registerNib:[UINib nibWithNibName:@"customTableViewCell" bundle:nil] forCellReuseIdentifier:@"customTableViewCell"];
}

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    return 5;
}

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    return 44;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    customTableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:@"customTableViewCell" forIndexPath:indexPath];
    cell.button.titleLabel.text = @"Label does not change immediately";
    cell.label.text = @"change label";
    return cell;
}

2 个答案:

答案 0 :(得分:10)

这是因为UIButton类有多个状态(Normal,Selected,Highlighted,Disabled)。当您更改其内部UILabeltextLabel的{​​{1}}属性)的文本属性时,UIButton函数会覆盖其属性,在加载表时调用。

要更改按钮标签中的文字,您需要调用setState方法。以下是您修复的代码:

setTitle:forState:

为了完成,您还可以将- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { customTableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:@"customTableViewCell" forIndexPath:indexPath]; [cell.button setTitle:@"Now it works" forState:UIControlStateNormal]; cell.label.text = @"change label"; return cell; } 方法与setAttributedTitle:forState:一起使用,这样您就可以将自己专门设置的字符串设置为标题。

答案 1 :(得分:1)

使用此

[cell.button setTitle:@"MyNewTitle" forState:UIControlStateNormal];