屏幕上没有视图控制器这样的东西;它的view 在屏幕上。话虽如此,您可以一次在屏幕上显示任意数量的视图。
我会创建一个新的视图和视图控制器。你不会让UIView 成为UITableViewDelegate,而是让UIViewController 成为UITableViewDelegate。但是,如果您使用的是 iPhone OS 3.x+,请不要手动执行此操作,而是让您的新视图控制器成为 UITableViewController 的子类。然后,您可以模态显示此视图控制器。
您可能希望让用户有机会取消选择。一个很好的方法是将新的对话框视图控制器包装在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 的示例源代码中有大量示例遵循这种一般模式。