子类 UIView 以在当前视图控制器上显示框
Posted
技术标签:
【中文标题】子类 UIView 以在当前视图控制器上显示框【英文标题】:Subclass UIView to show boxes on the current view controller 【发布时间】:2014-01-19 11:29:19 【问题描述】:我正在尝试继承 UIView 以允许我在单个视图控制器上为我的应用绘制六个小框 - 我的想法是我将在这 6 个框上使用标签显示文本。
我创建了一个新的objective-c 类子类UIView
,输入代码来设置框的大小/颜色/位置,最后通过替换@987654322 将自定义类应用于我的故事板中的“视图” @w 在身份检查器的Custom Class
部分中使用我的班级名称(顺便说一句,这是一个单视图应用程序),但是当我运行该应用程序时,什么都没有出现(除了故事板中已经存在的内容!) - 如果我使用在一个完全空白的应用程序中的相同代码出现 6 个框!所以我想我错过了一些东西......这是我的盒子代码的一部分:
// Only override drawRect: if you perform custom drawing.
// An empty implementation adversely affects performance during animation.
- (void)drawRect:(CGRect)rect
// Drawing code
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetRGBFillColor(context, 0.611, 0.505, 0.321, 0.8);
CGContextFillRect(context, CGRectMake(53, 271, 37, 52));
CGContextFillRect(context, CGRectMake(141, 271, 37, 52));
CGContextFillRect(context, CGRectMake(229, 271, 37, 52));
CGContextFillRect(context, CGRectMake(52, 399, 37, 52));
CGContextFillRect(context, CGRectMake(140, 399, 37, 52));
CGContextFillRect(context, CGRectMake(229, 399, 37, 52));
【问题讨论】:
【参考方案1】:根据您想要的(不是您的问题)的描述,不要打扰。相反,将标签(或文本字段)添加为子视图,并使用它们的背景颜色和图层边框属性来创建您想要的 UI 外观。
在您当前的代码中,drawRect:
应该调用 super。
【讨论】:
根据apple docs“如果你直接继承UIView,你的这个方法的实现不需要调用super。但是,如果你继承一个不同的视图类,你应该在某个时候调用super你的实施。”所以不需要[super drawRect] 我什至从未想过使用标签的背景来设置颜色...不知道为什么...显然是在思考问题:(虽然效果很好,但谢谢你:)以上是关于子类 UIView 以在当前视图控制器上显示框的主要内容,如果未能解决你的问题,请参考以下文章
XIB 中的 UIView 子类不显示(drawRect:从未调用)
Objective C - 从视图控制器设置 UIView 子类的标签属性