ios – Программно закодированный UIButton не отображается на моем представлении

,

Здравствуйте,

Я пытаюсь добавить UIButton и другие элементы в свой UIViewController программно и из того, что я прочитал и видел в других вопросах SO, я должен быть на правильном пути с помощью этого кода:

- (void)viewDidLoad { [super viewDidLoad]; UIButton *backButton = [UIButton buttonWithType:UIButtonTypeCustom]; backButton = [[UIButton alloc] init]; backButton = [UIButton buttonWithType:UIButtonTypeCustom]; backButton.frame = CGRectMake(10, 25, 150, 75); backButton.titleLabel.font = [UIFont fontWithName:@"Helvetica-Bold" size:15]; backButton.titleLabel.text = @"Back"; [self.view addSubview:backButton]; // Do any additional setup after loading the view. } 

Теперь этот код помещается в методе viewDidLoad, и он не появляется, что приводит меня к вопросу: «Что я делаю неправильно?

Когда я хочу изменить цвет фона и поместить в viewDidLoad, он отлично работает.

Приветствия Джеффа

Я думаю, вы можете правильно вставить кнопку, но просто не видите ее, потому что она не имеет фона и текст не отображается.

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

 // backButton = [UIButton buttonWithType:UIButtonTypeRoundedRect]; backButton = [UIButton buttonWithType:UIButtonTypeSystem]; backButton.frame = CGRectMake(10, 25, 150, 75); [backButton setTitle:@"Back" forState:UIControlStateNormal]; [self.view addSubview:backButton]; 

Обновление: UIButtonTypeRoundedRect устарел.

Вы создали кнопку, используя статический метод buttonWithType, снова вы выделили память для этой кнопки.

 UIButton *backButton = [UIButton buttonWithType:UIButtonTypeCustom]; backButton.frame = CGRectMake(10, 25, 150, 75); backButton.titleLabel.font = [UIFont fontWithName:@"Helvetica-Bold" size:15]; backButton.titleLabel.text = @"Back"; [self.view addSubview:backButton]; 

Вы неправильно устанавливаете заголовок кнопки. Использование:

 - (void)setTitle:(NSString *)title forState:(UIControlState)state 

Также, как говорили другие, вам не нужно три раза инициализировать кнопку. Удалите 2-ю и 3-ю строки.

Вы можете использовать dispatch_after для вызова блока позже. поэтому здесь первый вид загружен, он займет не более 0,1 с, а затем все кнопки видны. Xcode, начните вводить dispatch_after и нажмите Enter для автозаполнения следующим образом:

Попробуй это:

  dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ UIButton *backButton = [UIButton buttonWithType:UIButtonTypeCustom]; backButton = [[UIButton alloc] init]; backButton = [UIButton buttonWithType:UIButtonTypeCustom]; backButton.frame = CGRectMake(10, 25, 150, 75); backButton.titleLabel.font = [UIFont fontWithName:@"Helvetica-Bold" size:15]; backButton.titleLabel.text = @"Back"; [self.view addSubview:backButton]; }); 

Помимо вопросов, отмеченных в комментариях

UIButtonTypeCustom, создает пустую кнопку.

Используйте это, когда хотите использовать изображение как кнопку, но имейте в виду, используя setImage: переопределяет заголовок кнопки. Поэтому вам нужно будет установить BackgroundImage.

Ваша кнопка на самом деле там, она просто не «появляется» там

Так

Используйте UIButtonTypeRoundRect (это может быть немного иначе)

или если вы хотите изображение как кнопку.

Используйте UIButtonTypeCustom Call setBackgroundImage: затем вызовите setTitle:forState:

Вы должны использовать тип кнопки RoundedRect, тогда мы можем видеть цвет фона

 [UIButton buttonWithType: UIButtonTypeRoundedRect]; 

Надеюсь, это поможет!

Interesting Posts
Давайте будем гением компьютера.