我将此代码添加到我的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>
答案 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中设置了此属性?
答案 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)
}