我有自定义UITableView
的{{1}}。自定义单元格包含UITableViewCell
和UIButton
。
我在此观察到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;
}
答案 0 :(得分:10)
这是因为UIButton
类有多个状态(Normal,Selected,Highlighted,Disabled)。当您更改其内部UILabel
(textLabel
的{{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];