子类 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:从未调用)

UIView - 调整大小以适应内容

Objective C - 从视图控制器设置 UIView 子类的标签属性

iOS:使用 nib 子类化 UITableViewCell,进入 UIView(不是视图控制器)子类

子类化 UIView/UIViewController

显示和隐藏 UIView