我有一个非常奇怪的问题,那就是我第一次调用didSelectRowAtIndexPath
方法然后它不起作用。
如果我再次打电话,它就会完成。当我第一次设置断点时,didSelectRowAtIndexPath
中的代码也将执行,但不会推送到下一个控制器。
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
tableView.allowsSelection = NO;
ChatRoom *room = [_rooms objectAtIndex:indexPath.row];
if (!room.conv) {
room.conv = [[_im imClient] conversationForId:room.convid];
}
CDChatRoomViewController* chatRoomVC=[[CDChatRoomViewController alloc] init];
chatRoomVC.room = room;
chatRoomVC.convId = room.convid;
chatRoomVC.converSation = room.conv;
chatRoomVC.hidesBottomBarWhenPushed = YES;
[self.navigationController pushViewController:chatRoomVC animated:YES];
}
答案 0 :(得分:0)
建议您检查一下您的方法,有两种看起来非常相同的方法
//当您的单元格被选中时,将调用此Below方法
func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath) {
//Cell selected
}
//取消选择单元格时,将调用此Below方法。这可能是你的情况
func tableView(tableView: UITableView, didDeselectRowAtIndexPath indexPath: NSIndexPath) {
//Cell deselected
}
当您在tableview中选择一个单元格时,tableview将取消选择单元格的取消选择方法(多个选择除外)
希望这可以证明你的问题的答案是合理的。
答案 1 :(得分:0)
首先,您需要学习如何使用segue在视图控制器之间传输数据。在View Controller之间传输数据是一种非常快速和好的方法。还有其他方式像Delegate。
在您当前的视图控制器中,请声明
var selectedCD : Int = 0
按照didSelectRowAtIndexPath
方法,请修正这些。
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
yourTableName.deselectRowAtIndexPath(indexPath, animated: true)
// There is no need to do "tableView.allowsSelection = NO;"
selectedCD = indexPath.row
self.performSegueWithIdentifier("goToChatRoom", sender: self)
// "goToChatRoom" is the name of segue which will go to CDChatRoomViewController which you need to set this at Storyboard.
}
ViewWillAppear()
CDChatRoomViewController
self.hidesBottomBarWhenPushed = true
然后在您执行UITableView Delegate方法
的位置创建以下segue方法override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?){
if segue.identifier == "goToChatRoom"{
let destinationController = segue.destinationViewController as! CDChatRoomViewController
// handle selectedCD logic here
ChatRoom *room = [_rooms objectAtIndex:indexPath.row];
if (!room.conv) {
room.conv = [[_im imClient] conversationForId:room.convid];
}
destinationController.room = room;
destinationController.convId = room.convid;
destinationController.converSation = room.conv;
}
}
请在我的回答中编辑一些Objective-C代码,因为我真的不知道你在做什么。
您可以在这里学习使用segues:
Sending data with Segue with Swift
试试这种方式
请记住,不要在didSelectRowAtIndexPath 上添加[需要进行使用CPU或RAM的处理]的实现。