gpt4 book ai didi

iphone - iPhone 上 UITableView 的弹出模式

转载 作者:行者123 更新时间:2023-12-03 19:35:36 24 4
gpt4 key购买 nike

我需要弹出一个快速对话框,让用户从大约 2-5 个项目的列表中选择 UITableView 中的一个选项。对话框将是模态的,仅占据大约 1/2 的屏幕。我在如何处理这个问题之间来回思考。我应该子类化 UIView 并将其设为 UITableViewDelegateDataSource 吗?

我也更愿意在 IB 中展示这个 View 。因此,为了显示,我会从 View Controller 执行类似的操作(假设我的 View Controller 中有一个 DialogView *myDialog; 属性)

NSArray* nibViews = [[NSBundle mainBundle] loadNibNamed:@"DialogView" owner:myDialog options:nil];
myDialog = [nibViews objectAtIndex:0];
[self.view addSubview:myDialog];

问题是我试图传递owner:myDialog,它是零,因为它尚未实例化...我可以传递owner:self,但这将使我的 View Controller 成为文件的所有者这不是 IB 中对话框 View 的连接方式。

所以这让我认为这个对话框想要成为另一个完整的UIViewController...但是,从我读过的所有内容来看,每个屏幕应该只有一个 UIViewController,所以这让我感到困惑,因为我可以受益于 View Controller 附带的 viewDidLoad 等...

有人可以帮我解决这个问题吗?

最佳答案

屏幕上不存在 View Controller 之类的东西;它的 View 在屏幕上。话虽如此,您可以一次在屏幕上呈现任意数量的 View 。

我将创建一个新的 View 和 View Controller 。您不会将 UIView 设为 UITableViewDelegate,而是将 UIViewController 设为 UITableViewDelegate。但是,如果您使用的是 iPhone OS 3.x+,则不要手动执行此操作,而是将新 View Controller 设为 UITableViewController 的子类。然后,您可以以模态方式呈现此 View Controller 。

您可能想让用户有机会取消选择。一个好方法是将新的对话框 View Controller 包装在 UINavigationController 中,然后在导航栏中放置一个“取消”按钮。然后使用委托(delegate)模式通知父 View Controller 用户已做出选择,以便您可以弹出堆栈。

当您想要显示此选项对话框时,父 View Controller 中的代码如下所示:

- (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];
}

在原始 View Controller 中有一个匹配的方法,例如:

- (void)OptionViewController:(OptionViewController*)OptionViewController didFinishWithSelection:(NSUInteger)selection
{
// Do something with selection here

[self.navigationController dismissModalViewControllerAnimated:YES];
}

Apple 的示例源代码中存在大量遵循此一般模式的示例。

关于iphone - iPhone 上 UITableView 的弹出模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2504478/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com