Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/112.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 覆盖drawRect或使用ViewWillDisplay更有效的方法是什么_Ios_Objective C_Cocoa Touch_Uitextview - Fatal编程技术网

Ios 覆盖drawRect或使用ViewWillDisplay更有效的方法是什么

Ios 覆盖drawRect或使用ViewWillDisplay更有效的方法是什么,ios,objective-c,cocoa-touch,uitextview,Ios,Objective C,Cocoa Touch,Uitextview,我在几个ViewControllers中有几个UITextViews。过去,当我有几个实例需要为文本视图或标签等定制图形时,我只会调整视图中的图形将出现在拥有UI对象的VC内部。这一次,我需要定制几个实例 只创建一个子类的UITextView并将绘图代码包含在drawRect中,与将相同的绘图代码分散在多个VC中相比,是否更合适。我主要担心的是性能。不过,代码可维护性是次要的问题 明确地说,这是我在drawRect中使用的: - (void)drawRect:(CGRect)rect {

我在几个
ViewController
s中有几个
UITextView
s。过去,当我有几个实例需要为
文本视图
标签
等定制图形时,我只会调整
视图中的图形将出现在拥有UI对象的VC内部。这一次,我需要定制几个实例

只创建一个子类的
UITextView
并将绘图代码包含在
drawRect
中,与将相同的绘图代码分散在多个VC中相比,是否更合适。我主要担心的是性能。不过,代码可维护性是次要的问题

明确地说,这是我在drawRect中使用的:

- (void)drawRect:(CGRect)rect {
    self.layer.cornerRadius = 10;
    self.clipsToBounds = YES;
}

因此,在进一步测试之后,
initWithFrame
不会被调用,但是
initWithCoder
会被调用。我还发现,
initWithCoder
只调用一次,
drawRect
。在我的用例(一个
StaticCellTableView
和一个单元格中的
UITextView
有什么区别?

您可以在子类UITextView的init或initWithCoder(如果是xib或故事板)方法中包含这两行代码。
基本上,这只是对象的属性-不需要每次UIView需要刷新自身时都运行。

您可以在子类UITextView的init或initWithCoder(如果是xib或故事板)方法中包含这两行。
基本上,这只是对象的属性-不需要每次UIView需要刷新自身时都运行。

创建一个ViewController基类,然后将其用作所有其他VCs的超类。然后,您可以将此方法和其他方便的方法添加到其中,并共享财富


在这种特殊情况下,将其放在viewDidLoad的末尾将是一个很好的位置,因为它只发送一次消息,ViewWillDisplay可能会被多次调用。如果使用viewDidLoad,代码将执行一次。

创建一个ViewController基类,然后将其用作所有其他VCs的超类。然后,您可以将其添加到和其他方便的方法分享财富



在这种特殊情况下,将其放在viewDidLoad的末尾是一个很好的位置,因为它只发送一次消息,ViewWillDisplay可能会被多次调用。如果使用viewDidLoad,代码将执行一次。

我不会将这些行放在视图的drawRect中,因为每次刷新都会调用它。我建议您将UITextView类化并将这些行添加到自定义init方法。

我不会将这些行放入视图的drawRect中,因为每次刷新都会调用它。我建议您将UITextView子类化并将这些行添加到自定义init方法。

我尝试将绘图代码放入
-(id)initWithFrame:(cRect)中frame
,但没有被调用。我也尝试过重写
init
,但也没有被调用。如何加载UIView?.XIB/Storyboard?如果是这样的话->initWithCoder使用Storyboard加载它。我发现initWithCoder确实可以工作,但在测试中,它的调用次数与drawRect相同调用。使用这两种方法有什么区别呢?每当UIView需要渲染自身时,都会调用drawRect。很多时候,它只会调用一次,但可以多次。例如,如果你想绘制一些东西,或者做一些QuartzCore图形,你将在drawRect中进行,有时你必须调用setNeedsDisplay,这是将再次调用drawRect。如果它是superview将调用drawRect,它的子视图也将调用它。请记住-drawRect至少可以调用一次。initWithCoder始终只调用一次。如果您将此更新为引用initWithCoder,我将接受:D Thx!我尝试将绘图代码放入
-(id)initWithFrame:(cRect)frame
,但没有被调用。我也尝试过重写
init
,但也没有被调用。如何加载UIView?.XIB/Storyboard?如果是这样的话->initWithCoder使用Storyboard加载它。我发现initWithCoder确实可以工作,但在测试中,它的调用次数与drawRect相同调用。使用这两种方法有什么区别呢?每当UIView需要渲染自身时,都会调用drawRect。很多时候,它只会调用一次,但可以多次。例如,如果你想绘制一些东西,或者做一些QuartzCore图形,你将在drawRect中进行,有时你必须调用setNeedsDisplay,这是将再次调用drawRect。如果它是superview将调用drawRect,它的子视图也将调用它。请记住-drawRect至少可以调用一次。initWithCoder始终只调用一次。如果您将此更新为引用initWithCoder,我将接受:D Thx!不是所有VC都将具有
TextView
,也不是所有具有
TextV的VCView
将具有相同的名称
TextView
。也许我误解了你的答案。我发现你宁愿对每个TextView进行子类化,也不愿向基类添加一个helper方法,该方法将TextView作为唯一参数,然后进行你想要的更改。我开发的每个iOS应用都使用了BaseViewController子类类,我们在其中放置这样的通用功能。ymmv我所要做的就是告诉
TextView
它是什么类,就是什么类。因为不是所有VC都有
TextView
,我已经为我的VC有了一个基类(它们都有一个动态背景视图),我发现查看特定VC上是否有
TextView
,然后进行
层的调整不是很有效。cornerRadius
调整似乎更容易创建UITextView子类,然后告诉IB中的对象它是什么类。不是所有VC都有
TextView
,也不是所有VC都有