2012-09-27 57 views
4

嗨有人能幫我理解如何在iOS 6.0中編輯時自動佈局表格單元的組件?我已將AutoLayout FALSE設置爲在屬性檢查器中右上角的UITableViewCell自動調整選項!單元格的右側圖像視圖與刪除按鈕重疊。請參照附圖。以下是此代碼。無論如何,我可以解決這個問題嗎?iOS 6:UITableView編輯和自動修復

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    PlayerCell *cell = (PlayerCell *)[tableView dequeueReusableCellWithIdentifier:@"PlayerCell"]; 
    Player *player = [self.players objectAtIndex:indexPath.row]; 
    cell.nameLabel.text = player.name; 
    cell.gameLabel.text = player.game; 
    cell.ratingImageView.image = [self imageForRating:player.rating]; 
    return cell; 
} 

- (UIImage *)imageForRating:(int)rating 
{ 
    switch (rating) 
    { 
     case 1: return [UIImage imageNamed:@"1StarSmall.png"]; 
     case 2: return [UIImage imageNamed:@"2StarsSmall.png"]; 
     case 3: return [UIImage imageNamed:@"3StarsSmall.png"]; 
     case 4: return [UIImage imageNamed:@"4StarsSmall.png"]; 
     case 5: return [UIImage imageNamed:@"5StarsSmall.png"]; 
    } 
    return nil; 
} 

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    if (editingStyle == UITableViewCellEditingStyleDelete) { 
     [self.players removeObjectAtIndex:indexPath.row]; 
     [tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade]; 
    }  
} 

我已經添加了下面的委託方法,當我滑動單元格時它工作正常。

-(void)tableView:(UITableView *)tableView willBeginEditingRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    PlayerCell *cell = (PlayerCell *)[tableView cellForRowAtIndexPath:indexPath]; 
    cell.ratingImageView.hidden = YES; 
} 

- (void)tableView:(UITableView *)tableView didEndEditingRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    PlayerCell *cell = (PlayerCell *)[tableView cellForRowAtIndexPath:indexPath]; 
    cell.ratingImageView.hidden = NO; 
} 

...但是當按下editButtonItem按鈕時,這個方法不會被調用!真奇怪!我錯過了一些東西。我添加了以下方法,當按下Edit/Done按鈕時被調用,但沒有辦法檢測將被選中編輯的單元格!

- (void)setEditing:(BOOL)editing animated:(BOOL)animate 
{ 
    [super setEditing:editing animated:animate]; 
    if(editing) 
    { 
     NSLog(@"editMode on"); 
    } 
    else 
    { 
     NSLog(@"Done leave editmode"); 
    } 
} 

當用戶點擊左轉按鈕時,是否有添加選擇器在該按鈕上單擊並獲取單元格索引?

Image

回答

6

你ratingImageView使用自動尺寸口罩來調整,當你不使用自動版式擺正自己的位置。默認情況下,這意味着到左側和頂部的距離是固定的,尺寸不會改變。

當您切換單元格以編輯contentView時移動並調整大小,但您的ratingImageView保持固定在頂部和左側。您可以暫時(爲學習目的)爲單元格contentView設置背景顏色,並在編輯和刪除單元格時查看它的大小調整。

你想要的是你的評分視圖保持從右邊緣而不是左邊的固定距離。您可以通過設置ratingImageView的autoresizingMask屬性在InterfaceBuilder(在您執行XIB或Storyboard的過程中)或代碼中更改此項。


轉到此選項卡

Go to this tab

更改自動調整大小這樣

enter image description here

還是做在代碼

// in code you specify what should be flexible instead of what should be fixed... 
[ratingImageView setAutoresizingMask:UIViewAutoresizingFlexibleLeftMargin]; 
+0

我沒有設置右上UITableViewController不Imageview!我所有的方法都浪費!不能相信這是這麼簡單。非常感謝你!但只是想知道是否有任何方法,當我點擊左鍵按鈕編輯單元格時被調用?這是我無法想象的唯一的事情。 – applefreak

+0

如果我不記得有錯,你的單元格會通過UITableViewCellStateShowingDeleteConfirmationMask狀態發送' - (void)willTransitionToState:(UITableViewCellStateMask)狀態'。同樣的方法被稱爲默認狀態和編輯狀態。 (看文檔) –

+0

我的意思是我已經設置了正確的UITableViewCell哪個did not; t工作! – applefreak