繁体   English   中英

UIView中的UITableView和UIImage

[英]UITableView and UIImage inside a UIView

我正在开发一个当前具有View Controller(称为ViewControllerX)的应用程序。 MainWindow.xib文件包含以下内容:

File's Owner              UIApplication  
First Responder           UIResponder  
AppX App Delegate         myAppDelegate  
myViewControllerX         myViewControllerX  
Window                    UIWindow  

当我在Interface Builder中查看MainWindow.xib时,它显示了从“ myViewControllerX”加载的视图。 造成这种情况的myViewControllerX.xib文件包含以下内容:

File's Owner              UIApplication  
First Responder           UIResponder  
MainView                  UIView
  Image View (image1.jpg) UIImage View (Inside MainView)
  Rounded Rect Button     UIButton (Inside MainView)
  Rounded Rect Button     UIButton (Inside MainView)
  Table View              UITableView  (Inside MainView)

在“表视图”上,我将“出口”设置为dataSource = File的所有者,而Delegate = File的所有者。 引用出口设置为mTableView,它是使用XCode中的IBOutlet定义的。 当我运行这一切工作正常,并表被填充。

当用户点击表视图内的项目我想要一个新的观点,以滑动到位,其中也包含了TableView中(基本上是第一个视图控制器显示了一个概览列表,当一个项目在用户点击我想让它显示的细节的选择)。 在myViewControllerX.m文件中,我具有以下代码:

- (void)tableView:(UITableView*)theTableView didSelectRowAtIndexPath:(NSIndexPath*)theIndexPath 
{
[self.navigationController pushViewController:self.mViewControllerY animated:YES];
}

我创建了一个ViewControllerY并具有以下文件:

ViewControllerY.xib,ViewControllerY.m和ViewControllerY.h。

在ViewControllerY中的.xib文件,我有:

File's Owner              UIApplication  
First Responder           UIResponder  
Table View                UITableView

当我运行它时,它可以工作(因此Interface Builder中的代码和连接都可以)。 问题是它接管了整个视图,而我想让它具有一个Image(和其他UI对象)以及一个Table View。 我试图将ViewControllerY的UITableView更改为UIView类型,然后以类似于ViewControllerX的方式在UIView内添加UIImageView和UITableView,但是我无法使其正常工作,现在我不确定该怎么做! 所以,我的问题是,我如何去实现呢? 我希望能够在Interface Builder中对其进行设置,因此如何更改它以处理此问题? 例如,如何连接数据源,代理和出口等。

在此先感谢您的任何帮助。 我已经尝试过各种方法,但是似乎无法正常工作。 我敢肯定我快到了,一定要错过一些很明显的东西!

最好的戴夫

您的UINavigationController使用的内容视图或多或少完全覆盖了设备屏幕。 并且此视图用于您的主视图。 如果您要求此UINavigationController推入另一个视图,则他将使用该视图来交换ViewControllerYs视图,该视图也覆盖了整个屏幕。

为了获得所需的行为,您应该创建第二个“嵌入式”导航控制器实例,该实例仅负责最初由表视图组成的那部分。 将表格视图显示为主视图,然后要求该导航控制器将其他视图交换到屏幕的此部分。

在退后一步并进行更多挖掘之后,我想到了答案。

高级说明。

ViewControllerY必须是UIViewController类,而不是UITableViewController类。 .h文件中的ViewControllerY:UIViewController定义应包括表视图委托和数据源协议。 ViewControllerY的成员必须持有UITableView *-称为mTableView,应将其定义为IBOutlet。

然后,表视图委托方法应使用self.mTableView来访问表。

在Interface Builder中,UIView对象需要具有连接到文件所有者的出口“视图”,并且UIView内的表视图需要将dataSounce和Delegate设置为文件的所有者,并且mTableView出口也必须与文件的所有者。

低层说明。

在ViewControllerY.h中执行以下操作:

@interface ViewControllerY : UIViewController <UITableViewDelegate,UITableViewDataSource>
{
UITableView*  mTableView;
}

@property (nonatomic, retain) IBOutlet UITableView* mTableView;

在ViewControllerY.m中的Table View Delegate方法中,按如下方式访问mTableView:

myNewCell = (UITableViewCell*)[self.mTableView dequeueReusableCellWithIdentifier:myCellIdentifier];

(显然,您需要以常规方式定义和处理所有其他“表视图方法”。

ViewControllerY.xib应该包含以下内容:

File's Owner       ViewControllerY
First Responder    UIResponder
View               UIView
  Image View       UIImageView
  Table View       UITableView

控制从文件的所有者拖动到视图,然后选择“视图”。 Control从表视图拖到文件的所有者,然后选择数据源。 控制从“表视图”拖到“文件的所有者”,然后选择“代理”。 控制从文件的所有者拖到表视图,然后选择mTableView。

而已! 然后,您可以在UIView中添加其他UI对象,并以常规方式将其适当地连接起来。 我不确定这是唯一的还是最佳的解决方案,但是否可行,我对此感到满意。

希望这对遇到相同或相似问题的人有所帮助。 直到您掌握了它,这有点令人困惑。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM