我想用單元格左側的按鈕和按鈕右側的文本創建(不是非常)自定義的UITableView。IOS - 如何在UITableViewCell中移動UILabel?
我嘗試計算將UILabel放置在單元格的哪個位置,但改變框架沒有效果(甚至看起來並沒有計算 - 全爲0)。
我的問題是:何時計算標籤的幀大小? (所以改變會產生影響)。
這是正確的做法嗎?
下面的代碼片段。 首先是從細胞的init(稱爲響應dequeueReusable ... 是的, 'buttonColor', 'onTapSel', 'buttonFrame' 和 'buttonColor' 都是「成員變量(文件靜態全局)
- (id)initWithStyle: (UITableViewCellStyle)style
reuseIdentifier: (NSString *)reuseIdentifier
{
self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
if (nil == buttonColor)
{ buttonColor = kDefaultCellButtonColor; }
if (nil == onTapSel)
{ onTapSel = @selector(defaultCellButtonTapped:); }
if (self)
{
EGCellButton * cellButton = (EGCellButton *)[[EGCellButton alloc ] initWithFrame:buttonFrame ];
cellButton.backgroundColor = buttonColor;
[cellButton setTitle:buttonLabel forState:UIControlStateNormal];
[cellButton addTarget:self action:(onTapSel) forControlEvents: UIControlEventTouchUpInside];
[self setCellButton:cellButton];
float xx = buttonFrame.origin.x + buttonFrame.size.width + 5;
CGRect frame = self.textLabel.frame;
frame.origin.x += xx;
self.textLabel.frame = frame;
[self addSubview:cellButton];
}
return self;
}
和現在從的cellForRowAtIndexPath:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"EGButtonTableCellID";
EGButtonTableCell * cell = (EGButtonTableCell *) [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
cell.cellButton.indexPath = indexPath;
// Configure the cell...
cell.textLabel.text = @"abcdefghijklmnopqrstuvwxyz";
float xx = cell.cellButton.frame.origin.x + cell.cellButton.frame.size.width + 5;
CGRect frame = cell.textLabel.frame;
frame.origin.x += xx;
cell.textLabel.frame = frame;
return cell;
}
的結果是出現在細胞(如預期)的左側的按鈕,但第一個字母我在標籤看到的是「G」,因此前6個字符隱藏在按鈕後面(不打算)。
當我轉儲框架中的值時,除了origin.x以外,兩種方法都爲零。
這應該工作,是嗎?沒有?爲什麼不?等等 非常感謝大家!
:BP:在您的自定義的layoutSubviews
方法爲您的UILabel和UIButton的
你在哪裏設置buttonFrame的價值? – rdelmar
試圖在'cellForRow ...'中定製單元格是一個巨大的痛苦。我知道它看起來似乎比較容易,但你應該總是繼承UITableViewCell並且這樣做。 (按照Maggie的回答。) –