将子视图添加到自定义类
Posted
技术标签:
【中文标题】将子视图添加到自定义类【英文标题】:Add subview to a custom class 【发布时间】:2015-06-24 06:36:00 【问题描述】:我有一个要在其上创建自定义类的 UITextField。所以我创建了一个子类为UITextField
的文件。接下来,在自定义类中,我要实现一个tableView
。有点像自动完成textField
。
我开始创建它,并像这样添加tableView
:
[self addSubview:self.tableView];
当我运行应用程序时,tableView
在textField
中,所以我只能看到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,即textField
和tableView
应该是兄弟。
【讨论】:
感谢您的回答!!当我执行self.clipsToBounds = NO;
时,它会按原样显示 tableView,但 textField 下的单元格不可点击。
@Jessica 那为什么不尝试更好的方法呢?制作textField
和tableView
兄弟姐妹。
兄弟姐妹是什么意思!!抱歉...我是新手
@Jessica 将tableView
添加到textFiled
的superView 的subView 而不是textFiled
的subView。
当我做 [self.superview addSubview:self.tableView]
,我看不到 tableView以上是关于将子视图添加到自定义类的主要内容,如果未能解决你的问题,请参考以下文章
由于自动布局没有计算尺寸,将子视图添加到自定义视图最终会出错
将子视图添加到自定义 viewForHeaderInSection 会中断 VoiceOver 导航