Ios UtableView的固定标题?
我有一个Ios UtableView的固定标题?,ios,uitableview,Ios,Uitableview,我有一个UITableView,我想在上面粘贴一个44px的子视图。我尝试了tableViewHeader,但它会与表的其余部分一起滚动 我尝试过搜索,发现很多人说我需要添加UIView superview,然后将标题和UITableView添加到其中。然而,我找不到一个具体如何做到这一点的例子。我尝试创建一个新的UIView子类,并在IB中布置子视图,但在让表控制器与UITable链接时遇到了麻烦(因为我对IB了解不够) 我如何使用XIBs实现这一点?有人能举个例子吗 谢谢你们能提供的帮助。我
UITableView
,我想在上面粘贴一个44px的子视图。我尝试了tableViewHeader
,但它会与表的其余部分一起滚动
我尝试过搜索,发现很多人说我需要添加UIView superview,然后将标题和UITableView添加到其中。然而,我找不到一个具体如何做到这一点的例子。我尝试创建一个新的UIView子类,并在IB中布置子视图,但在让表控制器与UITable链接时遇到了麻烦(因为我对IB了解不够)
我如何使用XIBs实现这一点?有人能举个例子吗
谢谢你们能提供的帮助。我在发布后终于明白了这一点。数字:) 以下是我所做的,以防其他人遇到同样的问题:
UITableViewController
及其XIB。它们是垃圾。当你这样做的时候,你会非常生气UIViewController
子类UITableView
添加到UIView
UITableView
的IB插座中,确保将委托和数据源连接到文件所有者
以实现这些协议UITableView
委托和数据源方法,但使用UIViewController
而不是习惯于通过UITableViewController
在这之后,一切都会正常工作。问题是,UITableViewController的view属性与tableView属性是相同的。我也有同样的问题,想把一些固定的内容放在桌面上。我不想更改基类,因为它提供了许多我不想丢失或中断的强大功能 修复其实很容易。诀窍是为self.tableView属性创建自定义集和get。然后,在loadView中,使用新的UIView替换视图,并将tableView添加到其中。然后,您可以在tableView周围自由添加子视图。这是如何做到的: 在标题中:
@interface CustomTableViewController : UITableViewController
{
UITableView *tableView;
}
In.m:
- (UITableView*)tableView
{
return tableView;
}
- (void)setTableView:(UITableView *)newTableView
{
if ( newTableView != tableView )
{
[tableView release];
tableView = [newTableView retain];
}
}
- (void)loadView {
[super loadView];
//save current tableview, then replace view with a regular uiview
self.tableView = (UITableView*)self.view;
UIView *replacementView = [[UIView alloc] initWithFrame:self.tableView.frame];
self.view = replacementView;
[replacementView release];
[self.view addSubview:self.tableView];
//code below adds some custom stuff above the table
UIView *customHeader = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, 20)];
customHeader.backgroundColor = [UIColor redColor];
[self.view addSubview:customHeader];
[customHeader release];
self.tableView.frame = CGRectMake(0, customHeader.frame.size.height, self.view.frame.size.width, self.view.frame.size.height - customHeader.frame.size.height);
}
享受吧 作为一个选项,可以将UITableViewController作为UI的一部分嵌入另一个UIViewController,并使用“Container View”元素(从对象库(所有其他视图都在其中)的Interface Builder中选择一个) 通过这种方式,您可以像普通视图一样使用UITableViewController(就定位而言),并在不覆盖现有表视图代码的情况下合成所需的任何布局 编辑: 为了进一步扩展我的答案,以下是实现所述方法的步骤:
ViewController
元素从对象库
拖放到情节提要中,以添加新的控制器容器视图
,并将其放置在视图控制器
容器视图
创建另一个视图控制器和“嵌入式”segue作为连接。保存后可删除此视图控制器
,并将容器视图
连接到所需的视图控制器
(根据问题,它是UITableViewController)容器视图
与UITableViewController
连接,只需选择容器视图
并控制+拖动到UITableViewController-在弹出菜单中选择“嵌入”容器视图中显示容器的位置和边界
可以获取到Embeded view controller的链接-系统将启动主机viewcontroller(在上面的步骤1中创建)的“prepareForSegue”方法,并且控制器位于segue.destinationViewController属性中-可以根据需要对其进行自定义。只需确保在interface builder中为“embedded”segue设置一个标识符-这与任何其他segue的过程相同。将TableViewController替换为ViewController,在其中添加一个具有固定高度的UIView以放置所需的固定内容,并在其下方添加一个UITableView
为TableView创建一个出口
@IBOutlet weak var tableView: UITableView!
例如,您可以重新使用已拥有的所有函数删除覆盖字
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return data.count
}
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let c = tableView.dequeueReusableCellWithIdentifier(cellId) as UITableViewCell!
c.textLabel?.text = "A title"
c.detailTextLabel?.text = "A subtitle"
return c
}
查看此答案以添加自动刷新控件(如果需要)在脚本或xib中定义自定义UIView,在视图控制器中为该UIView创建IBOutlet引用。在-(void)视图中将出现:(BOOL)动画方法写入[self.tableView.superview addSubview:filterHeaderView]
,此处filterHeaderView
是我的标题视图的IBOutlet参考,我想将其添加为我的tableview中的固定标题。这应该是可以接受的答案。覆盖现有方法(如当前接受的答案)应该是最后的手段。但是,如果出于其他原因需要将其作为UITableViewController,这并不能解决问题。@PauldeLange您是指Steve的答案吗?重写现有方法有什么问题?使用普通UIViewController的问题是,您失去了使用UIRefreshControl的能力,而UIRefreshControl仅受UITableViewController支持。关于重写现有方法,您怎么说=您建议这样做吗?即使这样做有效,但在技术上是错误的,由于文档明确表示不要在loadView中调用super
(此解决方案需要执行此操作)。如果您认为此问题重复,则应将其标记为重复问题。不要将其他StackOverflow帖子的链接作为答案。这个问题没有重复,上面有人说原因之一是没有