UITableVIew在VIewController内部的didSelectRowAtIndexPath无法正常工作

时间:2015-06-15 07:38:23

标签: ios objective-c uitableview

我将此代码添加到我的ViewController类(#pragma mark - UITableViewDelegate Methods)

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {

    UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];

    NSLog(@"selected cell = %@", cell.textLabel.text);

    [tableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationNone];

    NSLog(@"row = %ld", indexPath.row);
}

我只想显示我选择的文字,但它不起作用。我有什么想法我做错了吗?

完整代码在此处:IOS 8 Objective-C Search bar and Table view Using Google Autocomplete

感谢您的帮助!

编辑: 我还添加了以下代码:

viewDidLoad方法(ViewController.m)

_tableView.allowsSelectionDuringEditing = YES;
_tableView.delegate = self;
_tableView.dataSource = self;

更改了ViewController.h代码
@interface ViewController : UIViewController

@interface ViewController : UIViewController <UITableViewDelegate, UITableViewDataSource>

6 个答案:

答案 0 :(得分:1)

在viewDidLoad中设置委托

_table.delegate = self;
_table.dataSource = self;
接口中的

然后声明协议

@interface ViewController : UIViewController <UITableViewDelegate, UITableViewDataSource>

答案 1 :(得分:1)

[tableView reloadRowsAtIndexPaths:] ...只有在[tableView beginUpdates][tableView endUpdates]之间包装时才有效;

[tableView beginUpdates];
[tableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationNone];
[tableView endUpdates];

检查代理是否设置为self

_tableView.delegate = self;

答案 2 :(得分:0)

使用调试器和断点。 我想说一个突破点:

UITableViewCell * cell = [tableView cellForRowAtIndexPath:indexPath];

并查看程序是否在那里停止。

答案 3 :(得分:0)

添加方法是不够的。你应该将表视图的'delegate'属性设置为'self',其中'self'表示你的视图控制器。

例如在您的.m文件中:

@interface MyViewController () <UITableViewDataSource, UITableViewDelegate>

@property (nonatomic, weak) IBOutlet UITableView *tableView;

@end


- (void)viewDidLoad
{
    [super viewDidLoad];

    [self.tableView setDelegate:self];
    [self.tableView setDataSource:self];
}

...

#pragma mark - UITableViewDelegate


- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    ...
}

编辑:另外请确保您已将tableView属性与Interface Builder内的表视图对象相关联。

答案 4 :(得分:0)

您是否在Interface Builder中设置了此属性?

Interface Builder

答案 5 :(得分:0)

方法名称更改或错误。您可以拖放以将ViewController设置为委托。但是这种方法需要在触摸行时进行处理:

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    print("section: \(indexPath.section)")
    print("row: \(indexPath.row)")
    // caller is set to the calling ViewController, when it "prepare" to launch this one
    caller.payFromSelection( selectedIndex: indexPath.row )
}

返回主控制器,它获取值并关闭具有tableview的子vc ...

func payFromSelection( selectedIndex:Int ) -> Void {
    print( selectedIndex )
    self.navigationController?.popViewController(animated: true)
    //self.navigationController?.popToRootViewController(animated: true)
}