2011-12-10 3 views
4

하나의 TableViewController에서 세부 공개 버튼 (또는 행)을 선택하고 첫 번째 테이블에서 두 번째 TableViewController로 데이터를 전달하지 않고 다른 TableViewController로 이동하려고합니다. 따라서 첫 번째 TableViewController는 선택된 상세 정보 버튼 (또는 행)에 따라 다른 TableViewController로 이동하는 테이블 역할을합니다.iOS 5 - 하나의 TableViewController에서 다른 TableViewController로 이동

지금까지이 작업을 수행하는 내 코드는 다음과 같습니다

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


    NSUInteger rowNumber = [indexPath row]; 
    NSString *categoryCode = [self.categoryCodes objectAtIndex:rowNumber]; 

    self.categoryData = [self.commuterDict objectForKey:categoryCode]; 

    [self performSegueWithIdentifier:@"ShowPlaces" sender:self]; 
} 

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { 

    if ([[segue identifier] isEqualToString:@"ShowPlaces"]) { 

     PlacesViewController *placesViewController = [segue destinationViewController]; 

     // --> I believe I'm missing something here to access a specific row? <-- 



    } 
} 

나는 누군가가 나를 도울 수 있기를 바랍니다!

답변

2

tableView : accessoryButtonTappedForRowWithIndexPath : 함수에서 indexPath의 특정 행을 가져옵니다. 특히, 탭 된 행은 indexPath.row입니다. 테이블에 여러 섹션이있는 경우 indexPath에서 섹션을 읽을 수도 있지만 단순한 테이블을 사용하는 것처럼 들릴 수 있습니다.

현재 행을 변수에 저장 한 다음 읽을 수 있습니다 prepareForSegue : 발신자가 어디로 갈지 선택합니다.

0

세부 정보 공개 버튼을 누르면보기 컨트롤러에서보기로 가져올보기로 segue를 끌 수 있습니다. 오스트리아 에서 마틴

2

의 UIViewController의 -prepareForSegue:sender:에 대한 문서

-(void)tableView:(UITableView *)tableView accessoryButtonTappedForRowWithIndexPath:(NSIndexPath *)indexPath 
{ 
    [self performSegueWithIdentifier:@"UpdateData" sender:self]; 
} 

건배를 다음과 같이 말한다 코드 내에서 SEGUE을 발사 할 수

segues가 여러 소스에서 트리거 될 수 있기 때문에

, 당신 segue 및 sender 매개 변수의 정보를 사용하여 segue에 대해 컨텍스트 을 정의하고 적절한 정보를 전달할 수 있습니다. 예를 들어, 세그가 테이블보기에서 시작된 경우 보낸 사람 매개 변수는 사용자가 탭한 테이블보기 셀을 식별합니다 ( ). 해당 정보를 사용하여 대상보기 컨트롤러에서 데이터를 설정할 수 있습니다.

주어진 점을 감안할 때, 먼저 sender 매개 변수를 살펴보고 테이블 셀에 대한 포인터가 될 것으로 기대합니다. 셀이 있어야하는 테이블을 알고있는 경우 -indexPathForCell:을 사용하여 셀의 인덱스 경로를 검색 할 수 있습니다. 발송 인 객체가 tableviewcell 인 경우

+0

당신이 단지를 통과하지 수 있도록 : 당신이 행을 알고 싶다면, 행 또는 인덱스 경로를 보내 이 경우 경로를 보낸 사람으로 색인 경로를 지정 하시겠습니까? – marchinram

+0

이것이 올바른 방법입니다.accessoryButtonTapped 메서드에서 현재 행을 저장하면 문제가 발생하지만 문제가 있는지 묻습니다. –

0

, 다음 코드는 작동합니다 :

NSIndexPath *indexPath = [[[segue sourceViewController] tableView] indexPathForCell:sender]; 

그렇지 않으면

NSIndexPath *indexPath = nil; 
if ([sender isMemberOfClass:[UITableViewCell class]]) 
{ 
    indexPath = [[[segue sourceViewController] tableView] indexPathForCell:sender]; 
} 
else if ([[sender superview] isMemberOfClass:[UITableViewCell class]]) 
{ 
    indexPath = [[[segue sourceViewController] tableView] indexPathForCell:(UITableViewCell *)[sender superview]]; 
} 
else if ([[[sender superview] superview] isMemberOfClass:[UITableViewCell class]]) 
{ 
    indexPath = [[[segue sourceViewController] tableView] indexPathForCell:(UITableViewCell *)[[sender superview] superview]]; 
} 
0

당신은 당신이 원하는대로 할 수 있습니다 SEGUE 준비에 사용하는 보낸 사람을보십시오. 당신이 실제 행을 사용하려면

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


    NSUInteger rowNumber = [indexPath row]; 
    NSString *categoryCode = [self.categoryCodes objectAtIndex:rowNumber]; 

    self.categoryData = [self.commuterDict objectForKey:categoryCode]; 

    [self performSegueWithIdentifier:@"ShowPlaces" sender:indexPath]; 
} 

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { 

    if ([[segue identifier] isEqualToString:@"ShowPlaces"]) { 

     PlacesViewController *placesViewController = [segue destinationViewController]; 

     // Row information is supplied as the sender 
     NSIndexPath *indexPath = sender; 


    } 
} 

는 다음 보낸 사람

[self performSegueWithIdentifier:@"ShowPlaces" sender:[tableView cellForRowAtIndexPath:indexPath]]; 
관련 문제