2014-06-24 3 views
0

JSON을 통해 동적으로 생성 된 테이블보기가 있는데 테이블보기에서 해당 항목 중 하나를 클릭하면 전송됩니다. 새 화면으로
온라인으로 찾은 프로젝트를 사용하여이 작업을하고 있지만 프로젝트는 이전 iOS 용이며 닙을 사용합니다. 전송하려는 화면도 동일한 JSON 파일을 통해 동적이어야합니다. 전송할 동적 화면을 만드는 방법과 현재 화면을 전송하는 코드를 가져 오는 방법을 알아야합니다.iOS 7.1에서보기 컨트롤러가없는 새 화면으로 전송할 수 없습니다.

#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]; 
} 

편집 :

여기에 새로운 화면으로 전송하는 내 현재 코드 (그것은 나이가 아이폰 OS에서 기억)입니다. 이것은 현재 세부보기를 만드는 데 필요한 코드입니다 (동적 인보기가 필요함) :

#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; 
} 
+0

단순히 세부 정보를 전달하여 그 정보를 기반으로보기를 만들거나 채우는 것이 어떨까요? – Losiowaty

+0

글쎄, 난 그걸하고 싶지만 어떻게 롤 모르겠다 – user3771324

+0

어떤 아이디어가 좋을거야. 감사 – user3771324

답변

0

당신은 (대부분) 필요한 모든 것을 갖추고 있습니다. 테이블 뷰 데이터 소스는 현재 하드 코딩되어 있으므로 코드의이 부분을 변경해야합니다. 메서드 이름은 꽤 자명하다.

당신은 어떻게해야하나요 :

  • 새로운 컨트롤러에 세부 사항을 전달하는 데 사용됩니다 예를 들어 '-(void) setDetails : (type)name를 들어,라는 PeopleDetailsViewController의 방법을 추가합니다. 이 데이터가 변경되었음을 테이블보기를 말할 것이다 그것은 그들이 '돈 있도록이

  • 변경 위의 mentiod 방법 (#pragma mark - Table view data source 아래의 메소드를 호출) 다시로드해야합니다 -이 함수의 끝에서 당신은 [self.tableView reloadData];를 호출해야 하드 코드 된 값을 반환하지만 오히려 세부 사항을 전달한 값.

가 아닌 표준 테이블 셀을 원하는 경우에, 당신은 인터페이스 작성 도구에서 그 (것)들을 디자인 할 수 및 IBOutlets로에 사용자 정의 클래스를 지정하고 이와 비슷하게 데이터로 채 웁니다.