iOS4 - пользовательский интерфейс доступа к стеку UINavigation - PullRequest
0 голосов
/ 11 ноября 2011

Немного смущен этим, так что терпите меня ...

У меня есть проект на основе навигации, который работает нормально.Я пытаюсь создать свой первый пользовательский UIView, чтобы создать пару кнопок, которые я буду использовать в нескольких местах.Одна из кнопок должна выдвигать контроллер вида в навигацию при нажатии, но я не уверен, как это сделать.

Когда у меня была кнопка настроена в контроллере вида, который я использовал:

LocationViewController *controller = [[LocationViewController alloc] initWithNibName:@"LocationViewController" bundle:nil];
        [self.navigationController pushViewController:controller animated:YES];
        [controller release];

но контроллер self.navigation теперь не будет работать, не так ли?Как получить доступ к навигационному контроллеру viewcontroller, к которому будет добавлен этот uiview?

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

EDIT TO ADD - у меня есть события нажатия кнопки внутри пользовательского UIView, так что именно здесь я пытаюсь изменить viewcontroller.Должен ли я вместо этого связать события с любым контроллером представления, к которому я добавляю представление?

Ответы [ 3 ]

0 голосов
/ 11 ноября 2011

Фактический контроллер должен находиться в стеке контроллера навигации, чтобы иметь возможность выдвигать другой контроллер.

Или вы можете создать новый экземпляр контроллера навигации и отправить ваш LocationViewController.

0 голосов
/ 11 ноября 2011

Обычно ваш appDelegate имеет свойство UINavigationController. Вы можете получить к нему доступ в своем пользовательском представлении, как это:

UINavigationController *navController = (MyAppDelegate *)[[[UIApplication sharedApplication] 
         delegate] navigationController];

Но более эффективным способом является создание метода делегата для вашего пользовательского представления и обработка действия кнопки в вашем viewController.

MyCustomView.h

    @protocol MyCustomViewDelegate 
    @interface MyCustomView : UIView  {
        id<MyCustomViewDelegate>    cvDelegate; }
    @property(nonatomic, assign) id<MyCustomViewDelegate>   cvDelegate;

    @protocol MyCustomViewDelegate @optional
    -(void)didClickInCustomView:(MyCustomViewDelegate*)view withData:(NSObject*)data; 
    @end

MyCustomView.m

    - (void)myButtonClick:(id)sender 
    { 
        [self.cvDelegate didClickInCustomView:self withData:someData];  
    }

Так что теперь вы можете обрабатывать это событие в любом месте, где у вас есть обычай вид.

0 голосов
/ 11 ноября 2011

Добавьте кнопку из построителя интерфейса или из viewDidLoad контроллера представления, используя код:

CGRect frame = CGRectMake(0, 0, 24, 24);
UIButton *button = [[UIButton alloc] initWithFrame:frame];
[button addTarget:self action:@selector(handleMyButton:) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:button];

Затем внедрите -(void)handleMyButton:(id)sender {}; в вашем контроллере представления.Или вместо этого вы можете написать -(IBAction)handleMyButton:(id)sender {}; и связать метод и кнопку с помощью построителя интерфейса.

Затем внутри метода просто вставьте блок кода, который вы разместили выше.Если вы начали с проекта шаблона контроллера навигации XCode, он должен работать.

Я думаю, что лучше скрыть назначенный инициализатор initWithNibName: потому что это деталь реализации.

Когда вы говорите, что подкласс UIView, я не знаю точно, что вы имеете в виду.Если вы хотите добавить другой контроллер представления с настраиваемым представлением, просто используйте шаблон UIViewController и настройте файл XIB, не нужно создавать подкласс UIView, если вы действительно не изменяете его поведение, что, я полагаю, не так.Представление является представлением, и такие элементы управления, как кнопки управления, должны находиться в контроллере.

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