Three20 простая навигация - PullRequest
       3

Three20 простая навигация

2 голосов
/ 24 февраля 2011

Я начинаю работать с библиотекой Three20 и создал UIButton, используя следующий код:

self.navigationItem.rightBarButtonItem = [[[UIBarButtonItem alloc] initWithTitle:@"Add New" 
                                                                           style:UIBarButtonItemStyleBordered
                                                                          target:@"tt://samples/new"
                                                                          action:nil] autorelease];

Когда пользователь касается кнопки, я бы хотел нажать экземпляр NewSampleViewController на навигационную панель. Я добавил следующее в метод -didFinishLaunchingWithOptions моего делегата приложения:

[map from:@"tt://samples/new" toViewController:[NewSampleViewController class]];

В существующем состоянии, когда нажата кнопка, ничего не происходит . На устройстве ничего не происходит, и я не вижу никаких записей в консоли.

Что я сделал неправильно или пропустил здесь?

Спасибо!

Ответы [ 3 ]

3 голосов
/ 24 февраля 2011

Если нет чего-то волшебного, что я еще не обнаружил, я не думаю, что вы правильно связали делегирование кнопок.Похоже, вы сказали кнопке, что строка @ "tt: // samples / new" является объектом, который получает событие нажатия, и вы хотите, чтобы он не отправлял никаких сообщений (не вызывайте метод / nil).

Создайте метод в контроллере представления с помощью кнопки, например, такой:

- (void)addButtonPressed:(id)sender{
  TTURLAction *urlAction = [TTURLAction actionWithURLPath:@"tt://samples/new"];
  [[TTNavigator navigator] openURLAction:urlAction];
}

Затем замените вашу кнопку init следующим:

    self.navigationItem.rightBarButtonItem = 
          [[[UIBarButtonItem alloc] initWithTitle:@"Add New" 
                                            style:UIBarButtonItemStyleBordered
                                           target:self
                                           action:@selector(addButtonPressed:)]
           autorelease];

Это вызовет экземпляр-одиночку TTNavigatorоткрыть действие, созданное с указанным путем строки.Кнопка должна обрабатываться делегатом кнопки, и self, ваш контроллер представления, идеально подходит для этого.Затем метод обработчика вызывает навигацию 32 с использованием пути.Если у вас все правильно подключено в appDelegate, Three20 создаст и выдвинет контроллер представления, который вы отобразили.Надеюсь, это поможет.

2 голосов
/ 27 февраля 2011

Решение от Levous работает, но вы можете упростить его, используя волшебный селектор Three20 openURLFromButton: вместо реализации своего собственного.Попробуйте это:

self.navigationItem.rightBarButtonItem = 
[[[UIBarButtonItem alloc] initWithTitle:@"Add New" 
                                   style:UIBarButtonItemStyleBordered
                                 target:@"tt://samples/new"
                                 action:@selector(openURLFromButton:)] autorelease];

Если вы хотите понять, почему это работает, проверьте:

Three20 / src / Three20UI / source / UINSStringAdditions.m.

В двух словах, Three20 добавляет метод openUrlFromButton для NSString, который вызывает TTNavigator openURLAction.

Примечание. Это решение не будет работать, поскольку отправитель должен иметь тип UIView, а не UIBarButton.Это работало до v1.02, хотя.В настоящее время вам нужно самостоятельно реализовать селектор с помощью OpenURL.Джефф (большой босс Three20) сделал замечание по этому поводу в запросе на извлечение 463: https://github.com/facebook/three20/pull/463

0 голосов
/ 24 февраля 2011

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

-(IBAction)navigationRightBarButton:(id)sender{

    [[TTNavigator navigator] openURLAction:
     [TTURLAction actionWithURLPath:@"tt://samples/new"]]; // goes tot he ttLauncher class
}

, которое затем подтолкнет представление к правильному пути URL, надеюсь, это поможет.

...