2011-04-13 4 views
0

그래서 "TopNewsViewController"라는 ViewController 클래스가 있습니다. RootViewController에서 NavigationController 스택으로 푸시됩니다.UIPopOver를 사용하여 다른보기로 이동

TopNewsViewController에서 단추를 클릭하면 나타나는 팝업이 나타납니다. 그것은 PopOver에서 테이블보기를 표시합니다.

이제 PopOver의 tableView : didSelectRowAtIndexPath 메소드에서 TopNewsViewController의 일부 속성을 수정하고 탐색 스택에 다시 넣기를 원합니다. 다음과 같이 나는 방법을 구현하고있다 : 팝 오버가의 ViewController하지 않고, 대신에있는 UITableViewController 때 나는 "self.navigationController"를 사용하고 있기 때문에

TopNewsViewController *topNewsViewController = [[[TopNewsViewController alloc] initWithNibName:@"TopNewsViewController" bundle:nil] autorelease]; 

NSString *feedStr = [rootViewController.feeds objectAtIndex:rowNumber]; 
[rootViewController release]; 
NSArray *thisFeed = [NSArray arrayWithObjects:feedStr, nil]; 
topNewsViewController.feeds = thisFeed; 
topNewsViewController.pageTitle = [categories objectAtIndex:rowNumber]; 
[self.navigationController pushViewController:topNewsViewController animated:YES]; 
[tableView deselectRowAtIndexPath:indexPath animated:YES]; 

나는이 작동하지 않는다는 것을 깨달았다. 대신 "topNewsViewController.navigationController"를 시도했지만 작동하지 않았습니다.

누구나 구현 방법에 대한 제안이 있습니까? 도움말/제안 사항을 매우 높이 평가합니다!

답변

1

만약 내가 올바르게 이해한다면, 아마도 당신의 가장 좋은 방법은 당신의 popover의 UITableViewController에 델리게이트를 구현하는 것이고 레코드가 선택되었을 때 델리게이트 메소드를 호출하여 RootViewController . 그런 다음 RootViewController는 사용하고자하는 새로운 TopNewsViewController가 무엇이든지 푸시 및 팝핑을 처리합니다. 여기서 작성하는 새로운 TopNewsViewController에는 기본적으로 탐색 컨트롤러가 없으므로 작동하지 않습니다.

그래서 루트 뷰 컨트롤러는 popover 뷰 컨트롤러의 위임자가됩니다 ... 행이 선택되면 "popOver : didSelectRow :"라고 말한 다음 RootViewController가 팝업을 닫고 "올바른 일을 수행합니다"(tm).

+0

아 - 네 말이 맞아. 하지만 어떻게 "대리자"로 내 RootViewController 구현할 것이라고? Popover View Controller에서 RootViewController 객체를 인스턴스화 하시겠습니까? 마찬가지로 : RootViewController * rootViewController = [[RootViewController alloc] initWithNib ....? – darksky

+0

참조 : [Objective-C로 델리게이트를 만드는 방법] (http://stackoverflow.com/questions/626898/how-do-i-create-delegates-in-objective-c) –

+0

그래서 popoverviewcontroller에서 이것을 만들었습니다 : @protocol PopOverDelegate @ 필요 없음 - (void) didSelectRow : (NSUInteger) row; @ end' 및 tableView : didSelectRowAtIndexPath : 구현 예 : NSUInteger rowNumber = [indexPath row]; [[자체 위임] didSelectRow : rowNumber]; [tableView deselectRowAtIndexPath : indexPath animated : YES]; ' 그러나 didSelectRow가 호출되지 않습니다 (일부 디버깅을 했음). 프로토콜을 잘못 작성하고 있습니까? – darksky