在iOS 7.1上,如果没有view controller,则无法转移到新屏幕
我有一个通过JSON动态创建的表视图,我希望当我点击表视图中的一个项目时,它会被转移到一个新屏幕上。 我使用我在网上找到的一个项目完成了这项工作,但该项目是针对较旧的iOS的,并且使用nibs。 我想要传输到的屏幕也必须是动态的,通过相同的JSON文件。我需要知道如何创建要传输到的动态屏幕,以及如何使当前代码能够传输到该屏幕 这是我当前要转移到新屏幕的代码,请记住它来自旧的iOS:在iOS 7.1上,如果没有view controller,则无法转移到新屏幕,ios,objective-c,json,ios7.1,Ios,Objective C,Json,Ios7.1,我有一个通过JSON动态创建的表视图,我希望当我点击表视图中的一个项目时,它会被转移到一个新屏幕上。 我使用我在网上找到的一个项目完成了这项工作,但该项目是针对较旧的iOS的,并且使用nibs。 我想要传输到的屏幕也必须是动态的,通过相同的JSON文件。我需要知道如何创建要传输到的动态屏幕,以及如何使当前代码能够传输到该屏幕 这是我当前要转移到新屏幕的代码,请记住它来自旧的iOS: #pragma mark - Table view delegate - (void)tableView:(UIT
#pragma mark - Table view delegate
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
// Navigation logic may go here. Create and push another view controller.
PeopleDetailsViewController *detailViewController = [[PeopleDetailsViewController alloc] initWithStyle:UITableViewStyleGrouped];
detailViewController.details = self.data[indexPath.row];
[self.navigationController pushViewController:detailViewController animated:YES];
}
编辑。这是创建详细信息视图的当前代码。需要动态的视图:
#import "PeopleDetailsViewController.h"
@interface PeopleDetailsViewController ()
@end
@implementation PeopleDetailsViewController
@synthesize details;
- (BOOL)prefersStatusBarHidden
{
return YES;
}
- (id)initWithStyle:(UITableViewStyle)style
{
self = [super initWithStyle:style];
if (self) {
// Custom initialization
}
return self;
}
- (NSString *)name {
return [NSString stringWithFormat:@"%@ %@", self.details[@"Tag"], self.details[@"B"]];
}
- (void)viewDidLoad {
[super viewDidLoad];
// Uncomment the following line to preserve selection between presentations.
// self.clearsSelectionOnViewWillAppear = NO;
// Uncomment the following line to display an Edit button in the navigation bar for this view controller.
// self.navigationItem.rightBarButtonItem = self.editButtonItem;
self.title = [self name];
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
#pragma mark - Table view data source
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
// Return the number of sections.
return 1;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection: (NSInteger)section {
// Return the number of rows in the section.
return 2;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath: (NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (!cell)
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:CellIdentifier];
switch (indexPath.row) {
case 0:
cell.textLabel.text = [self name];
cell.detailTextLabel.text = @":Tag";
break;
case 1: {
cell.detailTextLabel.text = @":Value";
cell.textLabel.text = self.details[@"Value"];
break;
default:
break;
}
}
return cell;
}
你需要的东西几乎都有了。您的表视图数据源目前是硬编码的,因此您必须更改代码的这一部分。方法名称是非常不言自明的 你应该做什么: 在PeopleDetailsViewController中添加一个名为“-void setDetails:typename”的方法,该方法将用于将详细信息传递给新控制器。此函数结束时,应调用[self.tableView reloadData];-这将告诉您的表视图数据已经更改,它应该调用pragma mark-table view data source下的方法重新加载数据 更改上面的mentiod方法,使它们不返回硬编码的值,而是返回详细传递的值
如果需要非标准表格单元格,您可以在Interface Bulder中设计它们,并使用IBOutlets为它们分配一个自定义类,然后用类似的数据填充它们。为什么不简单地通过一个方法传递细节,然后根据它们创建/填充您的视图?我很想这样做,但我不知道lolAny的想法有多好。谢谢