Mel*_*emi 3 iphone cocoa-touch uitableview uiviewcontroller uiview
我需要弹出一个快速对话框,让用户从大约2-5项的列表中选择UITableView中的一个选项.对话框将是模态的,只占用屏幕的1/2左右.我在如何处理这个问题之间来回走动.我应该继承UIView并使它成为UITableViewDelegate&DataSource?
我也更愿意在IB中列出这个观点.所以要显示我从我的视图控制器做这样的事情(假设我的视图控制器中有一个属性DialogView *myDialog;)
NSArray* nibViews = [[NSBundle mainBundle] loadNibNamed:@"DialogView" owner:myDialog options:nil];
myDialog = [nibViews objectAtIndex:0];
[self.view addSubview:myDialog];
Run Code Online (Sandbox Code Playgroud)
问题是我正在尝试传递所有者:myDialog是nil,因为它尚未实例化...我可以传递所有者:self但这将使我的视图控制器,File's Owner而不是如何在IB中连接该对话视图.
所以这让我觉得这个对话想要成为另一个全面的UIViewController...但是,从我所读过的所有内容中,每个屏幕应该只有一个UIViewController,所以这让我感到困惑,因为我可以从viewDidLoad视图中获益等等控制器...
有人可以帮我解决这个问题吗?
屏幕上没有视图控制器这样的东西; 它view在屏幕上.话虽如此,您可以一次在屏幕上显示任意数量的视图.
我会创建一个新的视图和视图控制器.你不会UIView成为一个UITableViewDelegate,你UIViewController成为一个UITableViewDelegate.但是UITableViewController,如果您使用的是iPhone OS 3.x + ,而不是手动执行此操作,而是将新视图控制器作为子类.然后,您可以以模态方式呈现此视图控制器.
您可能希望让用户有机会取消选择.一个好方法是将新的对话框视图控制器包装在a中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];
}
Run Code Online (Sandbox Code Playgroud)
您的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
Run Code Online (Sandbox Code Playgroud)
您的OptionViewController.m将具有以下内容:
- (void)madeSelection:(NSUInteger)selection
{
[delegate OptionViewController:self didFinishWithSelection:selection];
}
Run Code Online (Sandbox Code Playgroud)
在原始视图控制器中有一个匹配的方法,如:
- (void)OptionViewController:(OptionViewController*)OptionViewController didFinishWithSelection:(NSUInteger)selection
{
// Do something with selection here
[self.navigationController dismissModalViewControllerAnimated:YES];
}
Run Code Online (Sandbox Code Playgroud)
Apple的示例源代码中有大量示例遵循此一般模式.