Передача любого элемента управления в качестве аргумента функции - PullRequest
1 голос
/ 28 марта 2012

Я хочу создать общую функцию, которая принимает элемент управления в качестве аргумента (например, UITextField, UIButton и т.возможно

Ответы [ 5 ]

1 голос
/ 28 марта 2012

Вы также можете пойти так

- (void)  myFunction : (id) control
{
  if([control isKindOfClass:[UITextField class]]){
     // Your textfield condition
  }
}
1 голос
/ 28 марта 2012

Вы должны передать UIControl, так как это суперкласс для элементов управления.

Затем в своем коде вы должны использовать такие методы, как respondsToSelector:, чтобы определить, может ли переданный элемент управления выполнять то, что вам нужно.

Вы также можете проверить тип его класса, используя isKindOfClass: или isMemberOfClass.

Как только вы узнаете, с каким объектом вы имеете дело, вы можете набрать его, чтобы сэкономить при печати, и удалить все предупреждения о том, что не отвечает на селекторы, например:

// decided that it's a UITextField after using `respondsToSelector:` or `isKindOfClass:`
UITextField *aTextField = (UITextField *)control;

Этот метод известен как "типизирование утки" - поскольку он похож на выражение "если он ходит как утка и звучит как утка, то, вероятно, это будет утка".

0 голосов
/ 28 марта 2012

используйте общий идентификатор, затем приведите свой элемент управления и спросите, является ли это UITextField (или подклассом ...)

   - (void)  myFunction : (id)  control
    {
         //suppose if control is UITextField, I can set its font and its size.
         //something like this
        (UITextField*)aText = (UITextField*)control;
        if ([aText.class isSubclassOfClass:[UITextField class]]) {
            [aText setFont:[UIFont fontWithName:@"Verdana" size:12]];
        }
    }
0 голосов
/ 28 марта 2012

Да, это возможно. Вы можете передать UIView в качестве аргумента, например ниже

- (void)  myFunction:(UIView*)customView{
   if([customView isKindOfClass:[UIImageView class]]){
     // This is UIImageview
  }
}

Надеюсь, эта справка.

0 голосов
/ 28 марта 2012

UIControl - это суперкласс UITextField, UIButton и других элементов управления, так что вы хотите:

- (void) myFunction:(UIControl *) control
...