2013-05-25 6 views
1

Я ищу, чтобы скрыть кнопку в приложении i-phone, а затем нажав другую кнопку, она появится. Мне удалось заставить кнопку исчезнуть с щелчком, но не может понять обратное. Я также новичок в Objective-C, так как вы, вероятно, можете сказать, что любые советы по улучшению моего кода будут полезны. Благодаря!Скрытие кнопки Obj-C

.h:

@property(nonatomic,retain) IBOutlet UIButton* button1 ; 


-(IBAction)buttonTouch:(id)sender ; 

.m:

@synthesize button1=_button1; 

-(BOOL)hideOutlets {  
    _button1.hidden=TRUE; 
} 

-(void)buttonTouch:(id)sender { 
    _button1.hidden = !_button1.hidden; 
} 
+3

Этот код работает. Обратите внимание, что вы не можете коснуться кнопки «скрытый». Как вы пытаетесь это показать? – Sulthan

ответ

2

Ну, чтобы начать с нуля, если вы хотите скрыть установить кнопку его свойство hidden в YES, else, если вы хотите его снова открыть, установите свойство NO.

Пример:

button1.hidden=YES; 
button1.hidden=NO; 
+0

В Objective-C вы обычно не начинаете имя переменной локального или экземпляра с буквой верхнего регистра. Слишком легко путать с именем класса. – Monolo

+0

Ну да, вы правы, я его отредактировал, это был просто быстрый пример, поэтому я забыл на самом деле заботиться об этом ... также это проявляется разработчиком - объявление переменных - это то, что не указано каким-либо авторитетом – Maurice

+2

Абсолютно верно - но язык программирования также является средством общения между разработчиками, которые могут быть разделены годами и даже континентами. В этих случаях помогают следующие соглашения, особенно когда это не создает проблем в коде. – Monolo

0
@synthesize button1=_button1; 
    -(BOOL)hideOutlets { 

    _button1.hidden=TRUE; 

} 

-(void)buttonTouch:(id)sender { 

     _button1.hidden = FALSE; //Or "NO" or "0", it's a boolean 
} 

Кроме того, его странная установка кнопка скрыта с BOOL. Если вы хотите, чтобы они скрыты от нагрузки, идти ставить _button1.hidden = YES;, если вы хотите, чтобы скрыть это только тогда, когда вы его видимым, используйте

-(void)buttonTouch:(id)sender { 
if(_button1.hidden == YES) 
    { 
     _button1.hidden = NO; 
    } 
else { _button1.hidden = YES; } 
} 
+0

Сравнение с 'YES' - ужасный код, и иногда он не будет делать то, что вы ожидаете, вместо этого используйте' if (_button1.hidden) '. – Sulthan

+0

Все работает отлично, у меня никогда не было проблем с этим. –

+1

Вероятно, вы никогда не работали с чужим кодом или с C или obj-C++. 'BOOL valid = 20; if (valid) {do something} else if (valid == YES) {} '. Однако сравнение «BOOL» с «YES» или «NO» не является обязательным и затрудняет чтение. Сравните «если это спрятано» и «если скрыто да» – Sulthan

-2

Две очевидные проблемы с кодом, приведенным.

1) Какао использует YES и NO для булевых значений, а не TRUE и FALSE.

2) Вы объявили свойство, поэтому его следует использовать в предпочтении к синтезированной переменной экземпляра.

3) Способ нажатия кнопки на кнопке должен возвращать IBAction в реализации, а также интерфейс.

Не знаю, исправит ли это вашу проблему, но это первый шаг для исправления вашего кода.

@synthesize button1=_button1; 

-(BOOL)hideOutlets { 

    self.button1.hidden=YES; 

} 

-(IBAction)buttonTouch:(id)sender { 

    self.button1.hidden = !self.button1.hidden; 
} 
+0

@ikinciviking Да. Какой момент вы пытаетесь сделать? ДА - символ. TRUE - int. Я уже указал это. –

+0

Ничего из этого не объясняет или не устраняет проблемы с ПП -1. – vikingosegundo

+0

-1 Ничтожные вещи, которые в высшей степени актуальны. Не отвечает на вопрос. – Sulthan

1

Ваш код в основном правильно

-(void)buttonTouch:(id)sender { 
    _button1.hidden = !_button1.hidden; 
} 

Этот код будет скрывать свою кнопку, когда это показано и показать его, когда он скрыт. Это должно быть правильно.

Вы говорите

затем, нажав на другую кнопку она появится

Вы уверены, что обе кнопки имеют сенсорный вверх внутри события должным образом подключен к этому действию? Я думаю, ваша проблема будет заключаться в том, что buttonTouch: не вызывается, когда вы касаетесь другой кнопки.

+0

+1 для решения реального вопроса и не философствования о «природе bool - или почему я начал не оставлять причин для голосования» – vikingosegundo

+0

Досрочное голосование, потому что 'buttonTouch: (id) отправитель должен быть IBOutlet, так же, как и в декларации. –

0

Я постараюсь правильно ответить на вопрос, насколько я понимаю.

2 кнопки, кнопка1 и кнопка2. Нажатие кнопки1 скрывается и показывает кнопку2. Нажатие кнопки2 скрывается и снова показывает кнопку1.

-(IBAction)button1Pressed:(id)sender { 
    // button1 can only be pressed when not hidden, so we can dispense with checks for hidden 
    [button1 setHidden:YES]; 
    [button2 setHidden:NO]; // assuming this button was hidden at startup 
} 

-(IBAction)button2Pressed:(id)sender { 
    // button2 can only be pressed when not hidden, so no need to check for hidden 
    [button2 setHidden:YES]; 
    [button1 setHidden:NO]; 
} 

Это должно позволить вам переворачивать назад и вперед между кнопками, которые они скрывают/показывают друг против друга.

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