objective-c - 处理自定义组件 : subclass UIView or UIViewController?
<p><p>我正在开发 UISegmentedControl 的自定义实现。
我想创建一个能够接收配置数据并从中获得类似于 UISegmentedControl 的自定义 View 的组件。 </p>
<p>我开始继承 UIView,我可以使用以下代码创建自定义 UISegmentedControl:</p>
<pre><code>CustomSegment *segment = [
initWithTitles:];
;
</code></pre>
<p>但现在我想改进我的类(class)并为其添加更多可自定义的参数。
例如我想添加一个自定义分隔符,定义按钮字体等等......我的疑问是:
在 UIView 子类上工作是否更好,或者您建议我将 UIViewController 子类化,我可以在其中管理 View 层次结构,如 -<code>(void)loadView</code> 和 <code>-(void)viewDidLoad</code> ? </p>
<p>在一个简单的 UIView 子类中,当我启动自定义 init 方法时,我会立即设置 subview ...在使用 UIViewController 时,我可以调用自定义 init 并定义如何将我的 subview 构建到 -(void)loadView 中。 </p></p>
<br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
<p><p>不要使用 UIViewController,只需像您一样扩展 UIView 类并继续扩展其功能。 </p>
<p>请记住保存指向您添加的每个 subview (即按钮)的指针,以便以后能够访问它们。</p>
<p>定义自定义 setter ,例如,用于更改按钮标签标题的自定义 setter 将是:</p>
<pre><code>- (void) setButton1Title:(NSString*)str forState:(UIControlState)state{
//You can add some control here
if ( > 20) return;
; //_button1 is my reference to the button
}
</code></pre>
<p>等等。不要提供对 subview 的直接访问,而是使用方法。</p>
<p>此外,您可以使用“layoutSubviews”方法来定义您的 View 将如何在您的自定义 View 中显示。</p>
<p>希望对你有帮助。</p>
<hr/>
<p>编辑:在您的情况下,我不明白为什么要使用 lauoutSubviews 方法,但我想向您展示我想说的。</p>
<p>假设我需要创建一个 UIView 类来表示我的应用程序中的“联系人”对象。</p>
<p>这就是我会做的:</p>
<pre><code>@interface ContactView : UIView{
UILabel*_nameLabel;
UILabel*_ageLabel;
Contact*_contact;
}
@property (retain) Contact* contact;
@end
@implementation ContactView
@synthetize contact = _contact;
-(id)initWithContact:(Contact*)c{
self = ;
if (self) {
_nameLabel = [ init];
_nameLabel.frame = CGRectZero;
;
;
_ageLabel = [ init];
_ageLabel.frame = CGRectZero;
;
;
self.contact = c;
}
}
- (void) layoutSubviews{
;
_nameLabel.frame = CGRectMake(0.0f, 0.0f, 200.0f, 25.0f);
_ageLabel.frame = CGRectMake(0.0f, 25.0f, 200.0f, 25.0f);
if (self.contact){
_nameLabel.text = self.contact.name;
_ageLabel.text = self.contact.age;
}else{
_nameLabel.text = @"Unavailable";
_ageLabel.text = @"Unavailable";
}
}
- (void) setContact:(Contact*)c{
self.contact = c;
;
}
@end
</code></pre>
<p>查看如何使用“layoutSubiews”为标签设置正确的框架和数据。
通常,在创建必须重用 View 的自定义 UITableViewCells 时,我经常使用它。</p>
<p>如果我感到困惑,请告诉我。</p></p>
<p style="font-size: 20px;">关于objective-c - 处理自定义组件 : subclass UIView or UIViewController?,我们在Stack Overflow上找到一个类似的问题:
<a href="https://stackoverflow.com/questions/5668221/" rel="noreferrer noopener nofollow" style="color: red;">
https://stackoverflow.com/questions/5668221/
</a>
</p>
页:
[1]