首先我想说我只是提出这个问题,因为我想了解发生了什么。
我在 Xcode5 上全新安装时打开了一个旧的 Xcode 项目(一个非常简单的项目)。
当我意识到它在 iOS 7 上不起作用时。为什么?不知道..
我看到了一些其他问题,没有得到任何有用的答案,所以我做了一个简单的测试。
在里面UITableViewController
一切正常,除了didSelectRowAtIndexPath
一探究竟
根视图控制器.h:
@interface RootViewController : UITableViewController
@property (strong, nonatomic) NSMutableArray *items;
@end
根视图控制器.m
在 viewDidLoad 中,我初始化了数组(使用一些字符串)。
实现 dataSource 和 delegate 方法(是的,我将 delegate 和 dataSource 设置为 tableView)
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
return 1;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return [_items count];
}
- (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];
}
// Configure the cell...
cell.textLabel.text = [_items objectAtIndex:indexPath.row];
return cell;
}
问题就在这里:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
// Navigation logic may go here, for example:
// Create the next view controller.
DetailViewController *detailViewController = [[DetailViewController alloc] initWithNibName:@"DetailViewController" bundle:nil];
// Push the view controller.
[self.navigationController pushViewController:detailViewController animated:NO];
detailViewController.detailLabel.text = [_items objectAtIndex:indexPath.row];
}
DetailViewController
是一个简单的 UIViewController:
(是的,我在 nib 文件上设置了 IBOutlet)
@interface DetailViewController : UIViewController
@property (weak, nonatomic) IBOutlet UILabel *detailLabel;
@end
问题是这在iOS7上不起作用,标签在DetailViewController
没有更新。我尝试在之前和之后设置标签文本pushViewController
.
这适用于所有以前版本的 iOS。
为什么不能在 iOS 7 上运行?
我让这个工作的唯一方法是,就像我看到的这另一个问题 https://stackoverflow.com/a/18990719/810661:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
// Navigation logic may go here, for example:
// Create the next view controller.
DetailViewController *detailViewController = [[DetailViewController alloc] initWithNibName:@"DetailViewController" bundle:nil];
// Push the view controller.
[self.navigationController pushViewController:detailViewController animated:YES];
dispatch_async(dispatch_get_main_queue(), ^{
detailViewController.detailLabel.text = [_items objectAtIndex:indexPath.row];
});
}
有人可以帮助我了解这里发生了什么吗?
Thanks!
_
EDIT
它也像这样工作:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
// Navigation logic may go here, for example:
// Create the next view controller.
DetailViewController *detailViewController = [[DetailViewController alloc] initWithNibName:@"DetailViewController" bundle:nil];
// Push the view controller.
[self.navigationController pushViewController:detailViewController animated:YES];
if (detailViewController.view) {
// do notihing
}
detailViewController.detailLabel.text = [_items objectAtIndex:indexPath.row];
}