use*_*096 56 iphone objective-c ios4
我很难在UITableViewController的viewDidLoad方法中添加子视图(UIView)
这有效:
[self.view addSubview:self.progView];
Run Code Online (Sandbox Code Playgroud)
但是你可以通过UIView progView看到表格单元格出血.
我尝试过这种方法:
[self.view.superview insertSubview:self.progView aboveSubview:self.view];
Run Code Online (Sandbox Code Playgroud)
这是尝试将progView,UIView添加到当前视图上方的superview.当我尝试这个时,UIView永远不会出现.
- 更新 -
以下是最新的尝试:
UIView *myProgView = (UIView *)self.progView; //progView is a method that returns a UIView
[self.tableView insertSubview:myProgView aboveSubview:self.tableView];
[self.tableView bringSubviewToFront:myProgView];
Run Code Online (Sandbox Code Playgroud)
结果与[self.view addSubview:self.progView]相同; UIView出现但似乎在桌子后面.
Dan*_*idi 93
我尝试了上面的方法,但没有让它工作.我还发现它需要太多的配置和代码,因为它需要从头开始设置表视图(这可以从故事板中轻松完成).
相反,我在UITableViewController的UINavigationController视图中添加了我想在UITableView上面添加的视图,如下所示:
[self.navigationController.view addSubview:<view to add above the table view>];
Run Code Online (Sandbox Code Playgroud)
这种方法要求您将UITableViewController嵌入到UINavigationController中,但即使您不需要导航控制器,仍然可以使用此方法并隐藏导航栏.
Tho*_*eek 28
这实际上是非常可能和容易的 - 它只需要一些重新布线.我遇到了类似的情况,并将其编码为允许我在表格视图的顶部添加加载屏幕.此方法还允许您将静态表格单元格与您自己的内容一起使用.
如果您的控制器是Storyboard或XIB中的UITableViewController,并且您希望在保留现有表视图的同时将self.view重新分配给标准UIView:
将这些实例变量添加到头文件中:
IBOutlet UITableView *tableViewReference; // to keep a reference to the tableview
UIView *viewReference; // a reference to the new background view
Run Code Online (Sandbox Code Playgroud)
在Storyboard或XIB文件中:将tableViewin 连接UITableViewController到tableViewReference变量.
然后在您的实现文件中:
// Override the default accessors of the tableview and view
- (UITableView*)tableView { return tableViewReference; }
- (UIView*)view { return viewReference; }
- (void)viewDidLoad
{
[super viewDidLoad];
// instantiate the new self.view, similar to the tableview
viewReference = [[UIView alloc] initWithFrame:tableViewReference.frame];
[viewReference setBackgroundColor:tableViewReference.backgroundColor];
viewReference.autoresizingMask = tableViewReference.autoresizingMask;
// add it as a subview
[viewReference addSubview:tableViewReference];
/* remainder of viewDidLoad */
}
Run Code Online (Sandbox Code Playgroud)
虽然看起来很奇怪,但UITableViewController在幕后引用很多古怪的东西.您需要等到viewDidLoad才能进行交换.在此之后,访问者将指向正确的UIView和UITableView.
用法:喜欢的东西
[self.view addSubview:myView];
Run Code Online (Sandbox Code Playgroud)
将myView在表视图前添加UIView ,而不myView滚动表视图的内容.
注意:在指出解决方案包含临界矛盾代码之后,对此答案进行了编辑.UITableViewController对它所持有的引用做了一些奇怪的事情.一些更仔细的测试得出这个更简单的答案:)
Nic*_*zzi 11
我已经能够使用uiviewcontroller包含在uitableviewcontroller上添加子视图.
对于静态单元格而言,UITableViewController实际上非常方便,这可能是唯一一个"只使用uitableview"的常见答案实际上不可行的时候.
所以我就是这样做的.
添加代码如:
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view.
UITableViewController *vc = [self.storyboard instantiateViewControllerWithIdentifier:@"MyStaticTableView"];
[self addChildViewController:vc];
[self.view_container addSubview:vc.view];
}
Run Code Online (Sandbox Code Playgroud)
你可能遇到的问题:
添加代码:
- (void)viewWillAppear:(BOOL)animated
{
[[self.view_container.subviews lastObject] setFrame:self.view.frame];
}
Run Code Online (Sandbox Code Playgroud)
此时,您可以从UITableViewController直接访问容器视图
self.view.superview.superview
无论你添加什么,它都将显示在你的表视图控制器上
小智 11
您可以增加视图图层的zPosition.
这将使其显示在其他视图上方(默认情况下,zPosition等于0)
self.progView.layer.zPosition++;
[self.view addSubview:self.progView];
Run Code Online (Sandbox Code Playgroud)
Nik*_*Kov 10
这是我使用分镜脚本的方式:
2)链接到UITableViewController类:
@IBOutlet weak var copyrightLabel: UILabel!
Run Code Online (Sandbox Code Playgroud)
3)将其添加到代码中
self.navigationController?.view.addSubview(copyrightView)
copyrightView.frame = CGRect(x: 0,
y: self.view.bounds.size.height - copyrightView.bounds.size.height,
width: self.view.bounds.size.width,
height: copyrightView.bounds.size.height)
Run Code Online (Sandbox Code Playgroud)
该视图将不会与表格视图一起滚动。从情节提要中可以轻松进行设计。
注意: 此解决方案将子视图添加到导航控制器,并且如果您要从此处导航至另一个屏幕,您将发现该子视图保持不变,请在执行segue时使用viewDidDisappear上的copyrightView.removeFromSuperView将其删除。
由于UITableViewController是UIViewController的子类,因此您需要将所需的视图添加到其superview.
Swift:
self.view.superview?.addSubview(viewTobeAdded)
Objective C:
[self.view.superview addSubview: viewTobeAdded];
Run Code Online (Sandbox Code Playgroud)
问题是view属性UITableViewController与tableView属性相同.这意味着根视图始终是一个表视图控制器,任何作为子视图添加的内容都将受到表视图功能的限制.这有其他不良副作用,例如您可能不希望它们滚动的子视图.
这里有几个选项.您可以覆盖loadView并安装自己的视图和表视图:
// note: untested
- (void)loadView {
self.view = [[[UIView alloc] initWithFrame:CGRectZero] autorelease];
self.view.backgroundColor = [UIColor whiteColor];
UITableView *tblView = [[UITableView alloc]
initWithFrame:CGRectZero
style:UITableViewStylePlain
];
tblView.autoresizingMask =
UIViewAutoresizingFlexibleWidth |
UIViewAutoresizingFlexibleHeight
;
self.tableView = tblView;
[self.view addSubview:tblView];
[tblView release];
}
Run Code Online (Sandbox Code Playgroud)
然后,当您需要添加子视图时,请根据需要在其下方或上方添加self.tableView.
另一个选择就是创建一个UIViewController可以满足您需求的子类.UITableViewController说实话,这并没有增加太多,而且它实现的功能很少,很容易被复制.有一些文章,如Recreating UITableViewController,以增加代码重用,解释如何轻松地执行此操作.
我有类似的问题,并使用以下代码解决了:
[self.navigationController.view insertSubview:<subview>
belowSubview:self.navigationController.navigationBar];
Run Code Online (Sandbox Code Playgroud)
这将使用Stack中存在的控制器将视图插入正确的位置。
| 归档时间: |
|
| 查看次数: |
79637 次 |
| 最近记录: |