Как отправить объект в качестве аргумента при нажатии UIButton? - PullRequest
3 голосов
/ 22 марта 2011

В моем UIViewController есть следующий код -

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

Как видите, он вызывает метод внутри своего делегата контроллера навигации. Как правильно передать объект этому методу?

Ответы [ 4 ]

8 голосов
/ 22 июня 2012

Вы можете использовать свойство layer. Добавьте объект, который вы хотите передать в качестве значения в словарь слоя.

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

Этот yourObj доступен из функции действия кнопки:

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

С помощью этого метода вы можете передавать несколько значений функции кнопки, просто добавляя новые объекты в словарь с различными ключами.

2 голосов
/ 22 марта 2011

Или вы можете использовать objc_setAssociatedObject и objc_getAssociatedObject

1 голос
/ 22 марта 2011

Когда changeModeAction: вызывается, flipButton должен передать себя как отправителя.Если вам нужно передать дополнительные параметры, вы можете создать категорию для типа flipButton для хранения дополнительной информации или вы можете настроить словарь, к которому навигационный контроллер может получить доступ, например,

if(sender == flipButton)
 id obj = [someDictionary objectForKey:@"flipButtonKey"];
0 голосов
/ 16 марта 2017

расширение + Swift 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)
}

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...