Передать объект Button в метод - PullRequest
1 голос
/ 02 июля 2011

Я пытаюсь написать универсальный метод, который позволил бы мне передать следующее: "x", "y" "object" и затем заставить его двигаться. В настоящее время у меня есть это:

 -(void) changeObjectLocations: (integer_t) xSpot: (integer_t) ySpot: (id) sender   {

  if (![sender isKindOfClass:[UIButton class]])
   {
       UIButton *myObject = (UIButton *)sender;
       [UIView animateWithDuration:1.5              
        animations:^{                
        CGRect newFrame = myObject.frame;
        newFrame.origin.x = xSpot;
        newFrame.origin.y = ySpot;
        myObject.frame = newFrame;
    }];             
}
  else if (![sender isKindOfClass:[UILabel class]])
  {
    UILabel *myObject = (UILabel *)sender;
    [UIView animateWithDuration:1.5  animations:^{                
        CGRect newFrame = myObject.frame;
        newFrame.origin.x = xSpot;
        newFrame.origin.y = ySpot;
        myObject.frame = newFrame;
    }];  
  }
}

Затем я хочу назвать это так:

-(void) orientationBlockLandscape {

    [self changeObjectLocations: 456 :282 : btn1] ;
    [self changeObjectLocations: 391 :227 : lblTitle] ;

}

Хотя это работает, при компиляции я получаю следующее предупреждение:

SecondViewController.m: 33: предупреждение: «SecondViewController» может не отвечать на «-changeObjectLocations :::»

Есть ли лучший способ, которым я могу / должен передавать объект? Заранее спасибо за любую помощь.

Geo ...

Ответы [ 2 ]

1 голос
/ 02 июля 2011

Исходя из выведенного предупреждения, похоже, что вы не определили changeObjectLocations в заголовке вашего SecondViewController - или это не та подпись, что вы реализовали.

0 голосов
/ 02 июля 2011

Компилятор ищет селекторы, которые являются определениями методов с переменными и возвращаемым значением.

Таким образом, такой метод, как:

-(void) setObject:(id) anObject forKey:(NSString *) keyname;

... будет иметь селектор:

setObject:forKey:

Поэтому ваш метод:

 -(void) changeObjectLocations: (integer_t) xSpot: (integer_t) ySpot: (id) sender

... будет иметь селектор:

changeObjectLocations:xSpot:ySpot:

Обратите внимание, что имена параметров являются частью селектора, поэтому:

changeObjectLocations:xSpot:ySpot:

и

changeObjectLocations:::

.. - это два совершенно отдельных селектора, которые представляют два совершенно разных метода.

Хотя в языке разрешено использовать параметры без имен, например ":::", это очень и очень плохая практика, в основном потому, что легко получить конфликт имен.Явное явление не только облегчает чтение и поддержку кода, но и облегчает работу компилятора и среды выполнения.

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