2015-07-21 8 views
0

Привет, я новичок в программировании на iOS. Я пишу приложение iOS и реализовал несколько UIButtons. Я должен установить свойства для этих кнопок. Поэтому вместо того, чтобы писать повторяющийся код для каждой кнопки, я применил отдельный метод, чтобы в основном установить свойства. код приведен нижеПередача UIButton по ссылке

-(void)abc{ 

_xCord = self.view.bounds.size.width/2.0f; 
_yCord = self.view.bounds.size.height/2.0f; 

[self setButtonProperties:_def]; // def is ivar UIButton 

_xCord+=50; 
_yCord+=50; 

[self setButtonProperties:_ghi]; // ghi is ivar UIButton} 

Набор свойств кнопки приведен ниже

- (void)setButtonProperties:(UIButton *)button{ 


button = [UIButton buttonWithType:UIButtonTypeCustom]; 
button.frame = CGRectMake(_xCord, _yCord, 50, 50); 

button.clipsToBounds = YES; 
button.layer.cornerRadius = 50/2.0f; 
button.layer.borderColor = [UIColor redColor].CGColor; 
button.layer.borderWidth = 2.0f; 
[self.view addSubview:button]; 
} 

Здесь кнопка добавлена ​​для просмотра, но это не отражается с Ивар UIButton.When я реализую целевые методы действия кнопок соответствующие методы кнопок не вызываются. Есть ли способ отправить UIButton в качестве ссылки или любым другим способом, я могу достичь того же, чтобы метод setButtonProperties фактически устанавливал свойства ivar UIButton.

Заранее спасибо

+1

Они всегда по ссылке, кажется, у вас есть проблема с неправильными ссылками или у вас нет ссылки вообще – Wain

ответ

2

Вы можете передать Ивар по ссылке, как это (добавление & к Ивар и регулировочной метод setButtonProperties). Но поскольку ваш код действительно не нужен, я предлагаю, чтобы ваш код возвращал кнопку, как предлагает Pravin Tate.

-(void)abc{ 

    _xCord = self.view.bounds.size.width/2.0f; 
    _yCord = self.view.bounds.size.height/2.0f; 

    [self setButtonProperties:&_def]; // def is ivar UIButton 

    _xCord+=50; 
    _yCord+=50; 

    [self setButtonProperties:&_ghi]; // ghi is ivar UIButton} 

    NSLog(@"foo"); 
} 

- (void)setButtonProperties:(UIButton * __strong *)button{ 


    *button = [UIButton buttonWithType:UIButtonTypeCustom]; 
    (*button).frame = CGRectMake(_xCord, _yCord, 50, 50); 

    (*button).clipsToBounds = YES; 
    (*button).layer.cornerRadius = 50/2.0f; 
    (*button).layer.borderColor = [UIColor redColor].CGColor; 
    (*button).layer.borderWidth = 2.0f; 
    [self.view addSubview:*button]; 
} 
+0

Спасибо, я не знал, как разыменовать указатель, используя (UIButton * __strong *). Это сработало. Однако подход Правина Тейта не сработал. – Chandan

+0

Нет, его пример наполовину испечен. Это должно быть что-то вроде _def = [self setButtonProperties]; [self.view addSuvView: _def]; и удалите ненужный аргумент setButtonProperties. – Stefan

0

Чтобы сохранить ту же ссылку новой кнопки объект, который вы создаете на этом методе, вы должны иметь свой метод, как это:

- (void)setButtonProperties:(UIButton **)button{ 


    UIButton *tempBbutton = [UIButton buttonWithType:UIButtonTypeCustom]; 
    tempBbutton.frame = CGRectMake(_xCord, _yCord, 50, 50); 

    tempBbutton.clipsToBounds = YES; 
    tempBbutton.layer.cornerRadius = 50/2.0f; 
    tempBbutton.layer.borderColor = [UIColor redColor].CGColor; 
    tempBbutton.layer.borderWidth = 2.0f; 
    [self.view addSubview:tempBbutton]; 
    *button = tempButton; 
} 

Это, как создается объект ошибки и сохраняет в той же памяти объекта ошибки (& ошибка), которую мы передаем по методу.

Смежные вопросы