動態創建嘗試各種選項後,和SO閱讀無數的答案,我張貼這個問題,希望有人能提供一些見解或者對這個問題的解決方案:的UIButton顯示上多次的UITableView時的UITableViewCell
iOS5的。 1,XCode 4.4.1,故事板,ARC
我有一個「分組」的tableview,每個單元格包含一堆標籤,圖像和按鈕。其中一個標籤,說明標籤,因爲它的文本可以是大或小,這意味着如果文本很大,我必須相應地增加標籤的大小,並將相應的按鈕放置在相應的位置。我能夠做到這一切,但問題是,當我滾動瀏覽第一個單元格並在滾動時不斷重複時,按鈕會出現兩次。
這裏是代碼,我正在做的是根據文本計算標籤高度,調整標籤大小,然後相應地將3個按鈕放置在描述標籤下方。
下面的代碼只是一個按鈕,但這應該給我的想法。我試圖在自定義單元類中的「willDisplayCell」中做類似的事情,但仍然重複着3個按鈕,當我在tableview中向下滾動時。請參閱屏幕截圖,前三個按鈕不應該顯示。
我注意到的第一3點的按鈕,位置相同,如果它忽略sizeIncrement,意思是「359.0f + sizeIncrement 20」減去「sizeIncrement」,「sizeIncrement」計算後=說明標籤的高度
我也注意到,如果我這樣做
float y = 359.0f + 20;
,而不是這個
float y = 359.0f + sizeIncrement +20;
的repet按鈕問題已經消失。 P:我知道這不是最好的代碼,但我一直在嘗試很多東西來解決這個問題,所以在這一點上不用最佳實踐等等。
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"tipsid";
TipsCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil)
{
cell = [[TipsCell alloc]
initWithStyle:UITableViewCellStyleDefault
reuseIdentifier:CellIdentifier];
}
id tip = [_tips objectAtIndex: [indexPath section]];
NSDictionary *tipForIndex = [_tips objectAtIndex: [indexPath section]];
float sizeIncrement = [Utility getLabelHeightForText:[tipForIndex objectForKey:@"tipDescripion"]
withWidth:285.0f
withFont:[UIFont systemFontOfSize:14.0f]];
// Here I Resize the Label, code below to create a button and position accordingly.
float y = 359.0f + sizeIncrement +20;
UIButton *likeButton = [[UIButton alloc] initWithFrame:CGRectMake(10, y, 80, 26)];
likeButton.tag = [indexPath section];
// add targets and actions
[likeButton addTarget:self action:@selector(likebuttonClicked:) forControlEvents:UIControlEventTouchUpInside];
[likeButton setBackgroundImage:[UIImage imageNamed:@"likebutton.png"] forState:UIControlStateNormal];
[likeButton setImage:[UIImage imageNamed:@"likedButton.png"] forState:UIControlStateSelected];
// add to a view
[cell.contentView addSubview:likeButton];
.....同樣的方式創建其他2個按鈕
Nekto,感謝您的回答。我現在沒有我的開發機器,所以還沒有嘗試過你的建議,但我有一個問題,通常cell == nil返回false,因爲下面的代碼重用已經實例化的單元格「[tableView dequeueReusableCellWithIdentifier:CellIdentifier] ;「,那麼如果條件有幫助,將如何移動代碼? –
爲什麼你需要創建新的按鈕,如果你正在重複使用已經有這些按鈕的單元格? – Nekto
我不確定如果我完全理解你的問題,但在設計模式(Storyboard)中沒有單元格中的按鈕,我需要動態創建按鈕並將它們添加到單元格中的描述標籤下方,如代碼所示。我嘗試了你的建議,但就像我提到的那樣,如果條件使得按鈕從不創建,它永遠不會進入內部。 –