2011-03-22 4 views
3

나는 나의의 UIViewController 안에 다음과 같은 코드를 가지고 - 당신이 볼 수 있듯이UIButton을 두드렸을 때 객체를 인수로 보내는 방법은 무엇입니까?

[flipButton addTarget:self.navigationController.delegate action:@selector(changeModeAction:) forControlEvents:UIControlEventTouchUpInside]; 

는, 그것이 네비게이션 컨트롤러 대리인의 내부 메소드를 호출합니다. 이 메서드에 개체를 올바르게 전달하는 방법은 무엇입니까?

답변

2

또는 당신은 당신은 레이어 속성을 사용할 수 있습니다 objc_setAssociatedObject 및 objc_getAssociatedObject

+0

+1 난 그 옵션을 좋아한다, 무언가에게 새로운 일상을 배웁니다. – Joe

+0

이 문서 또는 비공개 API가 Apple에 의해 거부 될 수 있습니까? –

+0

설명서를보십시오. "Objective-C 런타임 참조"를 시도하십시오. – Henning

1

changeModeAction:이라고하는 경우 flipButton은 발신자로 전달되어야합니다. 추가 매개 변수가 필요하면 추가 정보를 저장하기 위해 flipButton 유형에 create a category을 입력하거나 navigationController에서 액세스 할 수있는 사전을 설정할 수 있습니다.

if(sender == flipButton) 
id obj = [someDictionary objectForKey:@"flipButtonKey"]; 
8

를 사용할 수 있습니다. 레이어 사전에 값으로 전달할 객체를 추가합니다.

[[btn layer] setValue:yourObj forKey:@"yourKey"]; 

yourObj 버튼 액션 기능에서 액세스 :이 방법

-(void)btnClicked:(id)sender 
{ 
    yourObj = [[sender layer] valueForKey:@"yourKey"]; 
} 

은 그냥 서로 다른 키를 사용하여 사전에 새 개체를 추가하여 버튼 기능에 여러 값을 전달할 수 있습니다.

0

확장 + 스위프트 3.0

extension NSObject { 

fileprivate struct ObjectTagKeys { 
    static var ObjectTag = "ObjectTag" 
} 

func setObjectTag(_ tag:Any!) { 
    objc_setAssociatedObject(self, &ObjectTagKeys.ObjectTag, tag, objc_AssociationPolicy.OBJC_ASSOCIATION_RETAIN_NONATOMIC) 
} 

func getObjectTag() -> Any 
{ 
    return objc_getAssociatedObject(self, &ObjectTagKeys.ObjectTag) 
} 

} 
관련 문제