2013-04-25 6 views
1

У меня есть класс UINavigationController, я хочу добавить на кнопку с помощью метода addSubview но не работаетUINavigationController addSubview

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil 
{ 
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; 
    if (self) { 
     // Custom initialization 
     UIButton *testbtn = [[UIButton alloc] initWithFrame:CGRectMake(20, 90,28,20)]; 
     [self.view addSubview:testbtn]; 
    } 
    return self; 
} 
+0

как вы называете этот класс? Вы уверены, что этот метод запущен? вы действительно вызывали 'alloc initWithNibName:' ​​перед вызовом этого класса? –

+0

Что еще более важно, какую функцию вы пытаетесь реализовать? Где эта кнопка будет и какова ее функция? Для меня это определит, где будет жить этот код и/или позволить нам предложить лучший способ реализовать функцию, которую вы пытаетесь реализовать. – vinnybad

ответ

2

Я не верю, что можно добавить кнопку к UINavigationController - это Безразлично» Фактически, они имеют собственное представление. UINavigationController - это скорее закулисный организатор для хранения и отображения других UIViewController.

Вам необходимо взять [self.view addSubview:testbtn] и поместить его в код UIViewController, а не в код для UINavigationViewController. И, как указал Дэвид Дойл в своем ответе, считается, что лучше использовать что-то подобное в viewDidLoad, а не в initWithNibName.

0

Если вы хотите изменить вид на View Controller, его не очень хорошая идея, чтобы сделать поэтому в методе init. Файл nib, который извлекает ресурсы, которые создают представление View Controller, занимает немного времени.

Вы лучше модифицирования мнение View Controller путем переопределения метода - [UIViewController viewDidLoad] так:

- (void)viewDidLoad 
{ 
    UIButton *testbtn = [[UIButton alloc] initWithFrame:CGRectMake(20, 90,28,20)]; 
    [self.view addSubview:testbtn]; 
} 
+0

ничего не изменилось, даже в viewDidLoad, мой класс @ Интерфейс DetailImagesViewController UINavigationController Я чувствую, что addSubview не работает –

1

Я предполагаю, что, поскольку вы пытаетесь сделать это на контроллере навигации, вы хотите, чтобы на панели инструментов был элемент панели. Вы должны это сделать в UIViewController, а не UINavigationController:

UIBarButtonItem * doneButton = [[UIBarButtonItem alloc] initWithTitle:@"Done" 
                  style:UIBarButtonSystemItemDone 
                  target:self 
                  action:@selector(buttonPressed:)]; 
[self.navigationItem setRightBarButtonItem:doneButton]; 

Кроме того, вы должны схватить чашку кофе и прочитать в разделе «Обзор» в UINavigationController class reference. Это займет около 10 минут, и вы будете счастливы.

Если я ошибаюсь, и вы хотите UIButton (а не UIBarButtonItem), вам также нужно сделать это в подклассе UIViewController. Кроме того, вы должны использовать свой заводский метод, а не обычный alloc/init:

UIButton *btn = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 
btn.frame = CGRectMake(20, 90,28,20) 
Смежные вопросы