2016-10-17 2 views
3

В моем текущем проекте я часто создаю UIView, чтобы поместить серый прямоугольник в представление. Обычно я сначала накладываю белые изображения на макет, а затем устанавливаю все границы в viewDidLoad(). Теперь я решил, что хочу ускорить процесс, написав подкласс, который автоматически установит границу представления, а затем установите все эти представления для использования этого подкласса. Но я не знаю, куда поместить этот код на подкласса:Каковы шаги по созданию подкласса для UIView, который добавляет границу?

self.layer.borderWidth = 2; 
self.layer.borderColor = UIColor.grayColor().CGColor; 

ли я поставить его на override init()? Нужно ли переопределять все версии init для UIView? Или есть лучший способ сделать это?

Спасибо.

PS: Если есть какой-либо способ сделать так, чтобы рамка сразу отображалась на время разработки раскадровки (я думаю, что она имеет какое-то отношение к drawable, но я вообще этого не понимаю), я будьте очень благодарны!

EDIT:

Из принятого ответа, я получаю этот ответ: https://stackoverflow.com/a/33721647/3003927, которые в основном так:

import UIKit 

class MyView: UIView { 
    override init(frame: CGRect) { 
     super.init(frame: frame) 
     didLoad() 
    } 

    required init?(coder aDecoder: NSCoder) { 
    super.init(coder: aDecoder) 
    didLoad() 
    } 

    convenience init() { 
    self.init(frame: CGRectZero) 
    } 

    func didLoad() { 
    //Place your initialization code here 
    self.layer.borderWidth = 2; 
    self.layer.borderColor = UIColor.grayColor().CGColor; 
    } 
} 

ответ

0

Там довольно подробный ответ здесь:

Proper practice for subclassing UIView?

В принципе, вы должны переопределить:

init?(coder aDecoder: NSCoder) и init(frame: CGRect) а также awakeFromNib(). Просто вызовите другую функцию там, где вы установите границу.

+0

Спасибо! Ответ, который действительно стал моим решением из вашей ссылки, заключается в следующем: http://stackoverflow.com/a/33721647/3003927, который поместил вызов функции 'didLoad()' на оба кадра init и init coder. –

1

Вам необходимо создать подкласс UIView и объявить свойства IBInspectable в соответствии с вашими потребностями в этом классе.

Try ниже ссылок, как например:

http://nshipster.com/ibinspectable-ibdesignable/

https://www.captechconsulting.com/blogs/ibdesignables-in-xcode-6-and-ios-8

+0

Я вижу, так что это инспекционно/условно, не тягостно lol. Я проверяю это прямо сейчас. Благодаря! –

Смежные вопросы