2016-02-27 88 views
0

我有一個表格視圖,其中包含可以提高和降低投票率的用戶帖子。我在細胞中,我使用像這樣的給予好評和downvote兩個自定義按鈕:當點擊另一個表格時取消選擇表格視圖單元格中的按鈕

// in cellForRowAtIndexPath: 
[cell.upVote addTarget:self action:@selector(handleThumbsUp:) forControlEvents:UIControlEventTouchUpInside]; 
[cell.downVote addTarget:self action:@selector(handleThumbsDown:) forControlEvents:UIControlEventTouchUpInside]; 

//the methods 

- (IBAction)handleThumbsUp:(ThumbsUpButton *)sender { 

    if (sender.selected == YES) { 

     [sender setSelected:NO]; 

    } else { 

     [sender setSelected:YES]; 

    } 

} 

- (IBAction)handleThumbsDown:(ThumbsDownButton *)sender { 

    if (sender.selected == YES) { 

     [sender setSelected:NO]; 

    } else { 

     [sender setSelected:YES]; 

    } 

} 

當選擇「好」按鈕,用戶改變了主意,並按下「大拇指向下」,我如何取消選擇同一單元格中的「豎起大拇指」按鈕?

回答

1

你應該有一個模型,其中包含「大拇指向上/向下」的信息;你不應該以被選擇的按鈕的形式將它存儲在你的視圖中。

當輕觸其中一個按鈕時,控制器應更新模型並根據模型的狀態刷新視圖。 (某種綁定系統會讓這更容易:ReactiveCocoa就是這樣一種選擇(儘管它不僅僅是模型/視圖綁定);另一種更簡單(無恥的鏈接到我自己的免費代碼)是我自己的UIViewController+WSSDataBindings category

0

通過@selector您可以訪問按鈕的屬性,而不是按鈕處理程序方法中單元格的另一個控件。

所以,您必須更新按鈕處理程序方法的全部單元格,並手動處理cellForRowAtIndexpath表的委託方法中按鈕的選定狀態。

0

對於最簡單的解決方案(使用最少的結構更改和代碼),可以通過將按鈕動作方法移動到您的自定義單元類來實現。然後加入行動,給予好評和downvote在cellForRowAtIndexPath:

// in cellForRowAtIndexPath: 
[cell.upVote addTarget:cell action:@selector(handleThumbsUp:) forControlEvents:UIControlEventTouchUpInside]; 
[cell.downVote addTarget:cell action:@selector(handleThumbsDown:) forControlEvents:UIControlEventTouchUpInside]; 

或者你也可以直接設置從筆尖文件這個方法。

然後像這樣改變upvote/downvote方法。

//the methods 

- (IBAction)handleThumbsUp:(ThumbsUpButton *)sender { 

    if (sender.selected == YES) {//upvote undone 

     [sender setSelected:NO]; 

    } else {//upvote done 

     [self.upVote setSelected:YES]; 
     [self.downVote setSelected:NO];//delesect downvote 
    } 

} 

- (IBAction)handleThumbsDown:(ThumbsDownButton *)sender { 

    if (sender.selected == YES) {//downVote undone 

     [sender setSelected:NO]; 

    } else { 

     [self.downVote setSelected:YES]; 
     [self.upVote setSelected:NO];//deselect upvote 

    } 

} 

也如約什 - 卡斯威爾他回答說,你應該有一個用戶給予好評和downvote數據在數據模型你填寫你的細胞。這只是這個特定情況的一個快速答案,但爲了支持dataModel更改,您可以在單元格內添加對模型的引用,並在此操作方法中修改它以保存投票。

相關問題