在UIView(UIView控制器)中加载多个tableviews

时间:2012-09-17 20:12:38

标签: ios xcode uitableview ipad

我一直在互联网上寻求帮助,但是我手头的问题几乎没有解决方案。我试图获得喘息的项目有点独特(UI并不完全遵循典型的规范)。

当前的发展环境:

  • xcode 4
  • 故事板而不是笔尖

下面是我想要完成的图表 - 所有这些都在UIView控制器中:

enter image description here

  • UIView是浅灰色背景
  • UITableView 1 - 这是一个静态(或者它可以是动态的,这是另一个挑战)UITableview将保存不同的数字 计算值
  • UITableView 2 - 这是一个UITableview,它会在每次运行时保存计算结果。
  • UIImageView 1 - 这是一个计算出的图像示例(我已经弄明白了)

我确信有经验的开发人员完全了解我的问题,或者即将问我的问题。我知道静态UITableView需要在tableview控制器中,但我需要同时显示UItableView,这意味着它必须在UIView中。

我可以通过IB使界面看起来像我需要的方式但是在尝试编译和构建时我收到的错误要求UITableView在UITableViewController而不是UIView控制器中。我看过许多使用主 - 细节布局的例子,但唯一的规定是这个UITableview需要在这个视图中100%显示。

所以基本上,我要求方向......但代码示例也不会受到伤害!谢谢100x的结束!

-Jonathan

1 个答案:

答案 0 :(得分:5)

UITableViewController只是专门设计用于显示全屏UIViewController的专用UITableView。 (完全)等效于使用UITableViewController子类或UIViewController <UITableViewDataSource, UITableViewDelegate>子类来管理tableview。

所以,即使UITableViewController有更多的spiecialized行为(如果它不存在,自动创建UITableView,自动滚动它以显示键盘,将自己设置为delegatedataSource在其管理的唯一UITableView等内容中,您可以使用标准UIViewController来管理UITableView并将其作为dataSource来填充它。

这甚至是一种管理未完整屏幕的tableview的方法(因为UITableViewController期望其view属性直接成为它管理的UITableView,而不是它的子视图主视图或其他任何内容,因此期望UITableView占据整个屏幕,而不是使用UIViewController UITableView作为其view的自定义大小的子类)


因此,在您的情况下,您可以拥有一个UIViewController,其中包含两个IBOutlets,每个tableView一个,并且唯一UIViewController可以是dataSource }(和delegate两者 UITableViews。那不是问题。请小心,然后在数据源方法中区分是否要返回第一个或第二个UITableView的数据,以便每次都提供正确的表。

@interface MyViewController : UIViewController <UITableViewDataSource, UITableViewDelegate>
@property (nonatomic, retain) IBOutlet UITableView* masterTableView;
@property (nonatomic, retain) IBOutlet UITableView* detailsTableView;
@end

@implementation MyViewController
@synthesize masterTableView = _masterTableView;
@synthesize detailsTableView = _detailsTableView;

// Proper memory mgmt not shown here:
//  - don't forget to set self.masterTableView and self.detailsTableView to nil in viewDidUnload
// - and to release _masterTableView and _detailsTableView in your dealloc method

-(UITableViewCell*)tableView:(UITableView*)tableView cellForRowAtIndexPath:(NSIndexPath*)indexPath
{
    UITableViewCell* cell;
    if (tableView == self.masterTableView)
    {
        static NSString* kMasterCellIdentifier = @"MasterCell";
        cell = [tableView dequeueReusableCellWithIdentifier:kMasterCellIdentifier];
        if (!cell)
        {
          cell = [[[UITableViewCell alloc] initWithReuseIdentiier:kMasterCellidentifier] autorelease];
          // do some configuration common to all your master cells
        }
        // configure the rest of your cell for each property that is different from one cell to another
    }
    else if (tableView == self.detailsTableView)
    {
        // Do exactly the same principle, but for the cells of your "details" TableView
    }
    return cell;
}