Нет такого понятия, как контроллер вида на экране; его view
находится на экране. С учетом сказанного вы можете одновременно отображать на экране столько представлений, сколько хотите.
Я бы создал новый контроллер вида и вида. Вы не станете UIView
быть UITableViewDelegate
, вы сделаете UIViewController
быть UITableViewDelegate
. Но вместо того, чтобы делать это вручную, вместо этого сделайте ваш новый контроллер представления подклассом UITableViewController
, если вы используете iPhone OS 3.x +. Затем вы можете представить этот контроллер вида модально.
Вы, вероятно, хотите дать пользователю возможность отменить выбор. Хороший способ сделать это - обернуть ваш новый контроллер диалогового окна в UINavigationController
и затем поместить кнопку «Отмена» в навигационную панель. Затем используйте шаблон делегата, чтобы сообщить родительскому контроллеру представления, что пользователь сделал свой выбор, чтобы вы могли вытолкнуть стек.
Вот как будет выглядеть код в вашем родительском контроллере представления, когда вы хотите представить этот диалог параметров:
- (void)showOptionView
{
OptionViewController* optionViewController = [[OptionViewController alloc] initWithNibName:@"OptionView" bundle:nil];
optionViewController.delegate = self;
UINavigationController* navController = [[UINavigationController alloc] initWithRootViewController:optionViewController];
[self.navigationController presentModalViewController:navController animated:YES];
[navController release];
[optionViewController release];
}
Ваш OptionViewController .h будет выглядеть так:
@protocol OptionViewControllerDelegate;
@interface OptionViewController : UITableViewController
{
id<OptionViewControllerDelegate> delegate;
}
@property (nonatomic, assign) id<OptionViewControllerDelegate> delegate;
@end
@protocol OptionViewControllerDelegate <NSObject>
- (void)OptionViewController:(OptionViewController*)OptionViewController didFinishWithSelection:(NSString*)selection;
// or maybe
- (void)OptionViewController:(OptionViewController*)OptionViewController didFinishWithSelection:(NSUInteger)selection;
// etc.
@end
Ваш OptionViewController.m будет выглядеть примерно так:
- (void)madeSelection:(NSUInteger)selection
{
[delegate OptionViewController:self didFinishWithSelection:selection];
}
У которого есть метод сопоставления в вашем исходном контроллере вида, например:
- (void)OptionViewController:(OptionViewController*)OptionViewController didFinishWithSelection:(NSUInteger)selection
{
// Do something with selection here
[self.navigationController dismissModalViewControllerAnimated:YES];
}
Существует множество примеров в исходном коде Apple, которые следуют этому общему шаблону.