понимание TTNavigator - PullRequest
       18

понимание TTNavigator

9 голосов
/ 23 февраля 2010

следующая ситуация:

в TTTableViewController я добавил несколько ячеек с URL. например, они открывают класс с @"tt://photos". это работает вполне нормально.

Во-первых, я видел несколько URL в примерах TT, таких как @ "tt / photos / 1". возможно ли получить это "1" в моем классе фотографий и сказать, например, хорошо, пожалуйста, откройте рисунок один, или это только еще один URL, который был объявлен в TTNavigatior для открытия определенного класса?

Другое дело: можно ли перенаправить объект в связанный класс? при нажатии на ячейку открывается @ "tt: // photos" (связанный класс в моем TTNavigator)

работая с обычными представлениями таблиц, я могу перезаписать свой метод init и отправить объект моим методом initialize. Возможно ли это, нажав мои TTItems?

спасибо!

Ответы [ 4 ]

21 голосов
/ 23 февраля 2010

разобрался сам, для тех, кому это нужно:

Сначала (пропуская "subURLs" на карте навигатора)

Возможно перейти к URL с @ "tt: // photos / firstphoto", вы можете получить "firstphoto" следующим образом:

//Prepare your Navigator Map like this
[map from:@"tt://photos/(initWithNumber:)" toViewController:[PhotoVC class]];

В вашем PhotoVC вы можете получить доступ к этому номеру:

-(void) initWithNumber: (NSString*)number {
    NSLog(@"%@",number);
}

вызов вашего View Controller с этим URL будет выглядеть так:

PhotoVC* controller = [[PhotoVC alloc] initWithNumber:@"1"];
[navigationController pushViewController:controller animated:YES];
[controller release];

Секунда (передача объектов в TTTableViewController)

Это немного сложно, но вам не нужно ничего делать подклассом.

во-первых, ноль URL в TableItem

 [TTTableLink itemWithText:@"TTTableLink" URL:nil]

в вашем TTTableViewController запишите этот метод

- (void)didSelectObject:(id)object atIndexPath:(NSIndexPath*)indexPath {
     TTURLAction *urlAction = [[[TTURLAction alloc] initWithURLPath:@"tt://photos"] autorelease];
     urlAction.query = [NSDictionary dictionaryWithObject:@"firstphoto" forKey:@"photo"];
     urlAction.animated = YES;
     [[TTNavigator navigator] openURLAction:urlAction];
 }

теперь в вашем PhotoVC вам нужно что-то вроде этого

- (id)initWithNavigatorURL:(NSURL*)URL query:(NSDictionary*)query {
     if (self = [super init]) {
              NSLog(@"%@",query);
}

     return self;
}

и все готово;)

3 голосов
/ 31 декабря 2010

Я пытался реализовать ответ choise, многому научился, и в конце концов мне пришлось отображать выноски и сохранять реализацию со многими URL-адресами простыми, поэтому вот что я сделал.

  1. Сохранить URL в TableItem,

  2. Используйте этот код в подклассе TTTableViewController.

    - (void)didSelectObject:(id)object atIndexPath:(NSIndexPath*)indexPath {
    
          NSLog(@"Its url is %@", [object URL]);
    
          TTURLAction *urlAction = [[[TTURLAction alloc] initWithURLPath:(NSString *)[object URL]] autorelease];
    
          urlAction.query = [NSDictionary dictionaryWithObject:self.user forKey:@"user"];
    
          urlAction.animated = YES;
    
          [[TTNavigator navigator] openURLAction:urlAction];
    
     }
    
     - (BOOL)shouldOpenURL:(NSString*)URL {
    
         return NO;
    
     }
    
  3. То, что «shouldOpenURL:» было обнаружено при просмотре TTTableViewController, я попробовал, и это сработало. Теперь табличное представление не открывает двойное представление, и есть выноски!

Спасибо, выбор!

0 голосов
/ 16 августа 2012

Вам не нужно запускать это в текущей версии 1.0.6.2 для TTTableViewController. Опция «URL» работает как положено. Если это не работает для вас, значит ваш URL не работает или вы вызываете неправильную функцию на вашем ViewController. Функция, которую необходимо вызвать через URL , должна возвращать идентификатор (быть конструктором для ViewController) ViewController. Тогда все будет работать как положено.

Я изменю пример формы choise так, чтобы TTNavigator ожидал, что он будет.

Добавить отображение, которое TTNavigator будет использовать для навигации:

//Prepare your Navigator Map like this
[map from:@"tt://photos/(initWithNumber:)" toViewController:[PhotoVC class]];

Создайте TTTableLink (или TTStyledText, или другой) с набором URL, который должен отображать вашу карту:

[TTTableLink itemWithText:@"TTTableLink" URL:@"tt://photos/1"]

Добавьте это в PhotoVC, чтобы TTNavigator вызывал его по указанному URL-адресу

-(id) initWithNumber: (NSString*)number {
    if (self = [super init]) {
        self.title = @"Some Title";

        NSLog(@"%@",number);
    }

    return self;       
}

Вам не нужно перезаписывать функцию didSelectObject , поскольку TTNavigator будет вызывать ваш ViewController через определенную функцию конструктора tt: // photos / (initWithNumber:)

0 голосов
/ 18 мая 2011

Хотя ответ выбора работает для нескольких параметров, когда вы создаете TTURLAction в коде, он не очень полезен, если вы хотите встроить ссылки для просмотра контроллеров в вашем TTStyledLabel.One решение этого заключается в использовании нескольких параметров в одной строке.

<a href='app://view2/param1=value1&param2=value2&...'>LabelName</a>

Если вы хотите, чтобы код анализировал такие URL-адреса и получал параметры, не стесняйтесь, присылайте мне сообщение, и я отправлю вам свои классы синтаксического анализа. (или вы можете создать свой собственный с NSScanner!)

Также не забудьте убежать от & s, иначе TTStyledLabel не понравится!

...