2014-03-19 2 views
0

프로그래밍 방식으로 UIButton을 추가했습니다. 그 중 addTarget이 필요합니다. 선택자 동작은 다른 클래스에 있습니다. 나는 이것을하기 위해 다음 코드를 사용했다.UIButton에 대한 addTarget의 매개 변수로 self.navigationController를 전달하십시오.

UIButton *homeBtn = [[UIButton alloc] initWithFrame:CGRectMake(10,5,32,32)]; 
homeBtn.backgroundColor = [UIColor greenColor]; 
[homeBtn addTarget:[myClass class] action:@selector(ButtonTapped:) forControlEvents:UIControlEventTouchUpInside]; 
[self.view addSubView:homeBtn]; 

+(void)ButtonTapped:(id)sender{ 
    NSLog(@"here"); 
} 

잘 작동합니다. 하지만 pushViewController을 함수에 self.navigationController 전달해야하는 클래스 함수에서 사용해야합니다.

나는 homeBtn.nav = self.navigationController; 를 사용하여 시도하지만이 'Property nav not found on object of type UIButton *'

이 사람이 나를 도울 방법 클래스 함수에 self.navigationController을 통과 말해 주실 래요 오류를 제공합니다.

감사합니다,

네하

+0

http://stackoverflow.com/questions/3716633/passing-parameters-on-button-actionselector –

답변

0

불행하게도,이 수 없습니다. (클래스) 메서드를 만드는 중입니다.이 메서드 이름은 +(void)ButtonTapped:(id)sender 앞에 +으로 표시됩니다. 이 메소드에서는 객체의 인스턴스 변수 나 속성에 액세스 할 수 없으므로 클래스에서 호출되며 객체가 아닙니다.

모든 것을 정적으로 만드는 대신, 달성하고자하는 것을 위해 인스턴스 정규 메서드를 만들려고 시도해보십시오. 예는 수 :

여기
[homeBtn addTarget:myObject action:@selector(ButtonTapped:) forControlEvents:UIControlEventTouchUpInside]; 
[self.view addSubView:homeBtn]; 

-(void)ButtonTapped:(id)sender{ 
    NSLog(@"here"); 
} 

, myObject 클래스 myClass의 인스턴스이어야한다.

이렇게하면 ButtonTapped 메서드를 호출하는 개체의 인스턴스 변수에 액세스 할 수 있으므로 self.navigationController을 사용할 수 있습니다.

추신. iOS의 이름 지정 규칙은 소문자와 클래스 이름을 대문자로 시작하는 메서드 이름을 사용하기 때문에 MyClass-(void)buttonTapped이됩니다.

0

다음 줄을 사용 할 수있게하려면 :

homeBtn.nav = self.navigationController; 

당신은있는 UIButton를 서브 클래 싱과에 속성을 추가 할 수 있습니다.

@interface CustomButton : UIButton 

@property (strong, nonatomic) UINavigationController *nav; 

@end 
관련 문제