2013-08-07 2 views
0

У меня есть панель навигации, в которой есть элемент навигации, который содержит 2 кнопки со стрелками, они создаются в раскадровке, и я хотел изменить одну из кнопок во время выполнения, теперь это работает :Проблемы с изменением свойств UINavigationItem во время выполнения

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view. 

    UINavigationItem *thisNavBar = [self myNavigationItem]; 
    thisNavBar.rightBarButtonItem = nil; // this works, it gets removed 

    UIBarButtonItem *insertBtn = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemEdit target:self action:@selector(insertSkemaItem:)]; 

    thisNavBar.rightBarButtonItem = insertBtn; // this also works, it sets the btn 

} 

Сейчас, на мой другой метод, который называется другим контроллером, он не работает

- (void)callChildChange { 

    ... 

    // remove old btn 
    UINavigationItem *thisNavBar = [self skemaNavigationItem]; 
    thisNavBar.rightBarButtonItem = nil; // does not work? 
} 

Там нет ничего плохого с помощью метода, он работает просто отлично, но нав БТН элемент не удаляется?

skemaNavigationItem - элемент навигации, объявленный в файле .h, который связывает элемент навигации, который я сделал через раскадровку.

+0

При входе в систему thisNavBar, она приходит обратно не-ноль? – rdelmar

ответ

0

Ваши элементы пользовательского интерфейса должны быть добавлены в ваш код (ctrl-dragging) в файле заголовка (.h), чтобы они могли публично получать доступ с других классов/контроллеров представлений.

Предположив, что вы сделали это, прячась элемент UI лучше всего сделать с помощью

relevantClass.yourViewObject.hidden = YES; 

или, если вам действительно нужно, чтобы удалить его навсегда,

[relevantClass.yourViewObject.view removeFromSuperView]; 

редактирует

Варианты замены целевого метода:

Dec Lare @property (nonatomic, assign) BOOL myButtonWasPressed; и:

- (IBAction) myButtonPressed 
{ 
    if (!self.myButtonWasPressed) 
    { 
     // This code will run the first time the button is pressed 
     self.myButton.text = @"New Button Text"; 
     self.myButtonWasPressed = YES; 
    } 
     else 
      { 
      // This code will run after the first time your button is pressed 
      // You can even set your BOOL property back, and make it toggleable 
      } 

} 

или

- (IBAction) myButtonWasPressedFirstTime 
{  
    // do what you need to when button is pressed then... 

    self.myButton.text = @"New Button Text";  

    [self.myButton removeTarget:self action:@selector(myButtonPressedFirstTime) forControlEvents:UIControlEventTouchUpInside]; 

    [self.myButton addTarget:self action:@selector(myButtonPressedAgain) forControlEvents: UIControlEventTouchUpInside]; 

} 

- (IBAction) myButtonWasPressedAgain 
{ 
    // this code will run the subsequent times your button is pressed 
} 
+0

Да, но я не хочу скрыть его, у меня есть изменение текста и действия btn, и я прочитал, что это невозможно сделать во время выполнения, поэтому я хотел установить его на нуль, а затем создать новый btn –

+0

Я думаю, что вы недопонимаете –

+0

Я думал, что вы хотите удалить эту кнопку из представления и/или изменить текст и действие кнопки. Объясните мне, что именно вы хотите. – user