2011-12-26 3 views
3

기존 프로젝트에 Three20을 추가했으며 라우팅 시스템에 문제가 있습니다.개체를 매개 변수로 사용하는 Three20 URL 라우팅

는 우리가 지금해야하는 것은 특정 행동을 B 발생할 때 나를에 작업을 트리거 할 수 있도록, 뷰 컨트롤러 B의 대리인으로 A을 가진, 뷰 컨트롤러 B에 뷰 컨트롤러 A에서 전환이다.

의 내가 다음과 같이 B를 호출하는에 버튼이 있다고 가정 해 봅시다 :

- (IBAction)buttonAction:(id)sender { 
    id bvc = [[[BViewController alloc] initWithDelegate:self] autorelease]; 
    [self.navigationController pushViewController:bvc animated:YES]; 
} 

지금, 대신 버튼을, 우리는 같은 목적을 위해 TTStyledText의 링크를 사용하고 싶습니다. 문제는 A보기 컨트롤러 인스턴스를 BinitWithDelegate: 메소드로 전달하는 방법을 알 수 없다는 것입니다. 문자열을 TTURLMap에 대한 매개 변수로 전달하는 방법을 발견했지만 그 방법은 유용하지 않습니다.

아마도 여기서 더 철저한 디자인 변경이 필요합니다. 이견있는 사람?

답변

3

여기에 2 개 옵션입니다

  1. 당신이 종류의 객체 컨테이너에있는 모든 개체를 설정하고 당신이 문자열로 인코딩 해당 컨테이너에 대한 ID를 얻을 수있는 글로벌 캐시에 넣어 url.

:이 paramters을 결합 약간 다른 방법을 포함 세 (20) 컨트롤러를 사용하여 URL을 호출하는 또 다른 유용한 방법이

  • 이 객체 :(의 수명주기를 관리하는 오버 헤드의 비트를 추가

    :이 같은 컨트롤러를 호출하여 당신이 그것을 호출

    -(id)initWithNavigatorURL:(NSURL *)URL query:(NSDictionary *)query { 
        self = [super initWithNavigatorURL:URL query:query]; 
        if (self) { 
         self.parameter = [query objectForKey:@"[YOUR PARAMETER NAME]"]; 
        } 
        return self; 
    } 
    

    :

    대상 컨트롤러는이 같은 다른 init 메소드있을 것입니다

    이제 남은 것은 라벨 안에 링크를 매핑하여 어떻게 든 멋진 TTURLAction을 호출하는 것입니다.

    스타일이 지정된 레이블을 호스팅하는 컨트롤러에서 TTURLMap을 변경하면됩니다. 공상를 호출하는 userpressedlink 방법 내부

    TTNavigator* navigator = [TTNavigator navigator]; 
    TTURLMap* map = navigator.URLMap; 
    [map from:@"yourapp://someaction" toObject:self selector:@selector(userpressedlink)]; 
    

    : 레이블이 추가 호스팅하는 뷰 컨트롤러에서

    - (void)from:(NSString*)URL toObject:(id)object selector:(SEL)selector; 
    

    너무 : three20는 다음과 같은 특정 클래스에 매핑을 추가하는 방법과 선택이있다 TTURLAction

    몇 가지 기억 :

    1. 당신이 필요 해당 매핑을 제거합니다 (매핑을 추가하려면 viewWillAppear을 제안하고 매핑을 추가하려면 viewWillDisappear를 사용하십시오).
    2. 각 링크는 고유 한 매핑을 가져야 링크를 구별하고 차이 선택기에 매핑 할 수 있습니다.
  • 관련 문제