Кнопка UIB не отображается при использовании команды hidden = FALSE - PullRequest
0 голосов
/ 01 февраля 2012

Я инициализировал UIButton в методе viewDidLoad:

- (void)viewDidLoad
{
    [super viewDidLoad];
resumeButtonTest = [UIButton buttonWithType:UIButtonTypeCustom];
    resumeButtonTest = [[UIButton alloc]initWithFrame:CGRectMake(500, 512, 48, 51)];
    resumeButtonTest.frame = CGRectMake(500, 512, 48, 51);
    [resumeButtonTest setImage:[UIImage imageNamed:@"resumebutton_splash_passive.png"] forState:UIControlStateNormal];
    [resumeButtonTest setImage:[UIImage imageNamed:@"resumebutton_splash_ontouch.png"] forState:UIControlStateHighlighted];

refreshButtonTest = [UIButton buttonWithType:UIButtonTypeCustom];
refreshButtonTest = [[UIButton alloc]initWithFrame:CGRectMake(500, 600, 48, 51)];
refreshButtonTest.frame = CGRectMake(500, 600, 48, 51);
[refreshButtonTest setImage:[UIImage imageNamed:@"refreshbutton_splash_passive.png"] forState:UIControlStateNormal];
[refreshButtonTest setImage:[UIImage imageNamed:@"refreshbutton_splash_ontouch.png"] forState:UIControlStateHighlighted];

[self.view addSubview:resumeButtonTest];   
[self.view addSubview:refreshButtonTest]; 
refreshButtonTest.hidden = TRUE;
resumeButtonTest.hidden =TRUE;
}

То, что я установил скрытым до тех пор, пока не произойдет сбой загрузки, и когда это произойдет, будет вызван этот метод:

-(void)displayFailure{


refreshButtonTest.hidden = FALSE;
resumeButtonTest.hidden = FALSE;

}

, и когда код выполняется, кнопки должны появляться, но нет.«Скрытая» команда не имеет никакого эффекта.Нужно ли обновить вид?Я действительно не понимаю, что происходит.Это должно быть действительно просто, но это не так ...

Ответы [ 2 ]

2 голосов
/ 02 февраля 2012

Проблема заключалась в том, что мы помещали много UIViews друг на друга, поэтому, когда я пытался скрыть и показать кнопки, вид, на котором эти кнопки были скрыты или показаны, был просто скрыт за другим видом ...всегда проверяйте, сколько представлений вы создаете, создавайте его только один раз в одном месте.

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

if ([NSThread isMainThread])
    NSLog(@"We are on main thread");
else
    NSLog(@"Not on main thread, make sure you are if you want to do UI updates");
1 голос
/ 01 февраля 2012

Обычно False и True используются при определении любой логической переменной. В Objective c для свойств пользовательского интерфейса мы всегда используем YES или NO, а не True или False. Поэтому используйте ДА и НЕТ вместо Истина или Ложь

...