Я хочу проверить UIbutton на UIView, имеет соответствующий обработчик.Как проверить UIButton есть цель?
Один из способов я видел:
NSArray *actions = [loginVC.registerBtn actionsForTarget:target forControlEvent:UIControlEventTouchUpInside];
Согласно яблоку actionForTraget
возвращает действия, выполняемые на целевой объекте при возникновении определенного события.
Но другого пути я видел, как имеющий петлю и проверка allTargets:
for (id target in loginVC.registerBtn.allTargets) {
NSArray *actions = [loginVC.registerBtn actionsForTarget:target forControlEvent:UIControlEventTouchUpInside];
XCTAssertEqual(actions.count, 1);
SEL handler = NSSelectorFromString(actions[0]);
XCTAssertTrue([loginVC respondsToSelector:handler]);
}
По ссылке яблочного:
allTargets
: Возвращает все целевые объекты, связанные с контролем.
В чем разница, чтобы не иметь петли. Когда нам нужно зацикливать его, и когда нам нужно просто получить actionForTarget?
вторая часть моего вопроса только нам нужно проверить, наша кнопка имеет цель или же проверить, какой метод связан выполнить действие следующим образом:
NSArray *actions = [loginVC.registerBtn actionsForTarget:target forControlEvent:UIControlEventTouchUpInside];
XCTAssertTrue([actions containsObject:@"onRegisterButtonPressed:"]);
Что такое лучшая практика?
Если разработчики меняют другой метод обработки действий для UIButton, они также должны изменить его в своем тесте, или нам нужно пройти тест на провал и обновление теста?
[ThunderCats] (https://github.com/metova/ThunderCats/blob/master/Categories/UIControl%2BTCAdditions.h) имеет для этого способ. – nhgrif