2013-04-17 77 views
0

我想在我的tableviewCells中創建一個星形按鈕,因此用戶可以保存喜歡的項目。UITableViewCell與UIButton和可視化問題

我已經嘗試過目前爲止。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 

    static NSString *CellIdentifier = @"Cell"; 

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
    if (cell == nil) { 
     cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];   
    } 

    UIButton *CameraBreak=[UIButton buttonWithType:UIButtonTypeRoundedRect]; 
    CameraBreak.frame=CGRectMake(260, 10, 60, 40); 
    CameraBreak.tag=indexPath.row; 
    [CameraBreak setImage:[UIImage imageNamed:@"first.png"] forState:UIControlStateNormal]; 

    [CameraBreak addTarget:self action:@selector(starClicked::) forControlEvents:UIControlEventTouchUpInside]; 
    [cell.contentView addSubview:CameraBreak]; 

    cell.textLabel.text = [titles objectAtIndex:indexPath.row]; 
    cell.textLabel.font = [UIFont fontWithName:@"Helvetica" size:15]; 

    return cell; 
} 

的問題是,在viewDidLoad中的按鈕看起來像這樣: VIEWDIDLOAD

但是,一旦我scoll表像這樣的按鈕變化: ON SCROLL

有誰知道這種行爲的原因是什麼?我該如何解決這個問題?

UPDATE

未選擇: enter image description here

選擇: enter image description here

回答

1

你爲什麼不只是使用UITableViewCellaccessoryView財產。

// create your button here...  
[cell setAccessoryView:cameraBreak]; // or cell.accessoryView = cameraBreak; 

此外,重命名CameraBreakcameraBreak。你應該使用camelCaseNotation

讓我知道這是否工作。

編輯

是這樣,也爲下面的想法很有用:如果(附件 選擇){秀yellowstar.png}否則(顯示graystar.png)

你可以更改UITableViewCellimageView財產。

cell.imageView = // set the correct image 

實現這一點非常簡單。按照how to set a tableview delegate。特別是你應該看看- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath;協議方法。

+0

哇,這工作出色的男人!非常感謝! 這種方式對於下面的想法也很有用: if(附件選中){show yellowstar.png } else(show graystar.png) – Foo

+0

@Foo如果你想檢查答案爲答覆(綠色檢查) 。這將有助於其他人遇到同樣的問題。乾杯。 –

+0

這種方式對於以下想法也很有用:if(選擇附件){show yellowstar.png} else(show graystar.png) – Foo

0

到位ROUNDRECT變化的UIButton類型的自定義和要添加按鈕每次你刷新你的表。因此,將所有代碼添加到您分配單元的大括號中,以便它們可以重用(不重複分配)。

替換此代碼

if (cell == nil) { 
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease]; 

} 
UIButton *CameraBreak=[UIButton buttonWithType:UIButtonTypeRoundedRect];    
CameraBreak.frame=CGRectMake(260, 10, 60, 40); 
CameraBreak.tag=indexPath.row; 
[CameraBreak setImage:[UIImage imageNamed:@"first.png"] forState:UIControlStateNormal]; 

[CameraBreak addTarget:self action:@selector(starClicked::) forControlEvents:UIControlEventTouchUpInside]; 
[cell.contentView addSubview:CameraBreak]; 

if (cell == nil) { 
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease]; 
UIButton *CameraBreak=[UIButton buttonWithType:UIButtonTypeCustom];   

CameraBreak.frame=CGRectMake(260, 10, 60, 40); 
CameraBreak.tag=indexPath.row; 
[CameraBreak setImage:[UIImage imageNamed:@"first.png"] forState:UIControlStateNormal]; 

[CameraBreak addTarget:self action:@selector(starClicked::) forControlEvents:UIControlEventTouchUpInside]; 
[cell.contentView addSubview:CameraBreak]; 

} 

它會正確顯示。

希望它可以幫助你。

+0

謝謝,但它只是刪除了RoundedRect。問題依然如此。 – Foo

+0

查看我的更新回答 –

+0

它確實有幫助,但是現在PNG只在我選擇一個單元格後才顯示出來。因此,一旦一個單元格突出顯示,我可以看到.PNG – Foo

0

你看到的是許多許多按鈕被添加到每個單元格的結果,一個在下。所有這些按鈕創建代碼應該在cell == nil條件內發生。它發生在新的細胞而已,不重用細胞的方法:

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
if (cell == nil) { 
    cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease]; 


    UIButton *CameraBreak=[UIButton buttonWithType: UIButtonTypeCustom]; 
    CameraBreak.frame=CGRectMake(260, 10, 60, 40); 
    CameraBreak.tag=indexPath.row; 
    [CameraBreak setImage:[UIImage imageNamed:@"first.png"] forState:UIControlStateNormal]; 

    [CameraBreak addTarget:self action:@selector(starClicked:) forControlEvents:UIControlEventTouchUpInside]; 
    [cell.contentView addSubview:CameraBreak]; 
} 

// configure the parts of the cell here that vary based on indexPath 
+0

感謝您的反饋。我已經按照建議更改了我的代碼,但是現在沒有顯示png。圓形矩形是可見的。任何想法爲什麼? – Foo

+0

更新:現在我發現,一旦我選擇了一個單元格,PNG就會顯示出來。 因此,一旦一個單元格突出顯示,我可以看到.PNG – Foo

+0

該按鈕應該是類型UIButtonTypeCustom。 – danh