将子视图添加到自定义类

Posted

技术标签:

【中文标题】将子视图添加到自定义类【英文标题】:Add subview to a custom class 【发布时间】:2015-06-24 06:36:00 【问题描述】:

我有一个要在其上创建自定义类的 UITextField。所以我创建了一个子类为UITextField 的文件。接下来,在自定义类中,我要实现一个tableView。有点像自动完成textField

我开始创建它,并像这样添加tableView

[self addSubview:self.tableView];

当我运行应用程序时,tableViewtextField 中,所以我只能看到tableView 的一部分。如何将其添加为subview,以便查看完整的tableView

【问题讨论】:

我猜你实际上想要自定义 UITableView,因为我看不到你正在使用自定义的 UITextField。并尝试清楚地解释您的要求。 我很确定 UITextField 不是那种可以很好地处理子类的类。我建议您使用组合而不是子类化。使用 UIExField 和 UITableView 作为子视图创建您自己的 UIView 子类。 看***.com/questions/16686379/… 【参考方案1】:

这就是你要找的 https://github.com/gaurvw/MPGTextField

这个 uitextfield 子类可以满足您的需求 - 它是为“搜索”功能而构建的。 如果你还想用自己的, 将tableview添加到uitextfield本身,而不是像

[[self superview] addSubview:tableViewController.tableView];

编辑:

您可以将框架设置为:

 CGRect frameForPresentation = [self frame];
 frameForPresentation.origin.y += self.frame.size.height;
 frameForPresentation.size.height = 200;
 [tableViewController.tableView setFrame:frameForPresentation];

将子视图添加到uitextfield的方法是重载layoutSubviews方法并在那里初始化你的tableview:

- (void)layoutSubviews 
 
[super layoutSubviews]; 
if (!self.tableview.superview) 
 
[self setupView]; 
 

【讨论】:

我试过没有tableViewController,只是一个tableView。当我运行应用程序时,我没有看到任何 tableViews 如何设置tableview的框架? CGRectMake(0, 0, 100, 300) 尝试使用 uitextfield 框架作为 tableview 的基本框架,正如我在编辑中提到的那样 我不认为问题出在框架中,因为我在执行 self addSubiew 时确实看到了其中的一部分。【参考方案2】:

这会将tableView 添加为textField 的子视图。

self.tableView.frame = CGRectMake(0, CGRectGetHeight(self.bounds), CGRectGetWidth(self.bounds), YOUR_TABLE_HEIGHT);
[self addSubview:self.tableView];
self.clipsToBounds = NO;

不过,更好的办法是让tableView成为textField的superView的subView,即textFieldtableView应该是兄弟。

【讨论】:

感谢您的回答!!当我执行self.clipsToBounds = NO; 时,它会按原样显示 tableView,但 textField 下的单元格不可点击。 @Jessica 那为什么不尝试更好的方法呢?制作textFieldtableView 兄弟姐妹。 兄弟姐妹是什么意思!!抱歉...我是新手 @Jessica 将tableView 添加到textFiled 的superView 的subView 而不是textFiled 的subView。 当我做 [self.superview addSubview:self.tableView],我看不到 tableView

以上是关于将子视图添加到自定义类的主要内容,如果未能解决你的问题,请参考以下文章

由于自动布局没有计算尺寸,将子视图添加到自定义视图最终会出错

将子视图添加到自定义 viewForHeaderInSection 会中断 VoiceOver 导航

添加和布局从 xib 加载的子视图到自定义单元格

如何以编程方式添加尺寸类自定义

jqgrid 更改子网格的位置或将子网格图标添加到自定义列而不是其他任何地方?

jqgrid更改子网格的位置或将子网格图标添加到自定义列而不是其他任何地方?