UITableView / UITabBarController: попытка выяснить метод передачи переменной в мой целевой контроллер при выборе строки - PullRequest
1 голос
/ 15 февраля 2012

Я использую UITableView, который указывает на UITabBarController, чтобы отобразить серию UIWebViews на этих вкладках.

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

StateTableViewController.h

#import <UIKit/UIKit.h>

@interface StateTableViewController : UITableViewController
{
    NSArray *StateList;
}

@property (nonatomic, retain) NSArray *StateList;

- (void) buildStateList;

@end

StateTableViewController.m

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return [StateList count];
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
    }

    NSInteger rowNumber = indexPath.row;
    NSString *stateName = [StateList objectAtIndex:rowNumber];

    cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
    cell.textLabel.text = stateName.capitalizedString;

    return cell;
}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    [tableView deselectRowAtIndexPath:indexPath animated:YES];

    NSInteger rowNumber = indexPath.row;
    NSString *stateName = [StateList objectAtIndex:rowNumber];

    [[self.navigationController.viewControllers objectAtIndex:2] setTitle:stateName.capitalizedString];
}

StateTrendViewController.h

    #import <UIKit/UIKit.h>

@interface StateTrendViewController : UIViewController
{
    IBOutlet UIWebView *StateTrendView;
    IBOutlet NSString *ViewURL;
}

@property (nonatomic, retain) UIWebView *StateTrendView;
@property (nonatomic, retain) NSString *ViewURL;

@end

StateTrendViewController.m

    #import "StateTrendViewController.h"

@implementation StateTrendViewController

@synthesize StateTrendView;
@synthesize ViewURL;

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // Custom initialization
    }
    return self;
}

- (void) viewWillAppear:(BOOL)animated 
{
    NSString *baseURL = @"https://www.google.com/search?q=";
    NSString *state = @"test";

    NSString *fullURL = [baseURL stringByAppendingString:state];
    NSURL *url = [NSURL URLWithString:fullURL];

    NSURLRequest *requestObj = [NSURLRequest requestWithURL:url]; [StateTrendView loadRequest:requestObj];
}

Мне нужно заменить статическую настройку на sting, передаваемый в контроллер с помощью свойства ViewURL У меня есть настройки:NSString *state = @"test";

Я использую раскадровку в своем проекте в Xcode 4.2.1.Как мне передать это строковое значение моему контроллеру?

Ответы [ 2 ]

2 голосов
/ 15 февраля 2012

Вы переопределяете prepareForSegue, более подробная информация здесь

1 голос
/ 15 февраля 2012

Если все, что вы передаете - это строка, простейшим способом может быть определение свойства в вашем контроллере представления, который вы представляете для хранения строки.Я заметил, что у вас уже есть определенное * ViewURL, но я не уверен, настроено ли это для этой конкретной задачи или оно уже предназначено для чего-то другого.

На основе кода, который вы 'Я поделился, я предполагаю, что в вашем didSelectRowAtIndexPath в контроллере таблицы контроллер, который вы устанавливаете заголовок, и, вероятно, позднее нажатие, является экземпляром StateViewController:

[[self.navigationController.viewControllers objectAtIndex:2] setTitle:stateName.capitalizedString];

Если эта строка действительноссылаясь на экземпляр StateTrendViewController, вы можете назначить вашу строку так же, как вы назначаете заголовок.Это необходимо установить, прежде чем переходить к новому контроллеру представления (я не вижу этого кода):

[[self.navigationController.viewControllers objectAtIndex:2] setViewURL:@"MyPassedString"] //assign custom property

Когда ваш контроллер представления появится на экране, у него уже будет установлено свойство ViewURL.

Также обратите внимание, что ваш стиль именования переменных экземпляра не является стандартным соглашением по какао, ivars beginLowerCase.Кроме того, это необычно и может не сработать, чтобы вставить контроллер TabBar в существующий навигационный контроллер, предположительно из контроллера представления таблицы в существующем навигационном контроллере.Обычно TabBar считается навигационной конструкцией верхнего уровня, и вы, возможно, захотите соответствующим образом переосмыслить свою архитектуру.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...