2016-04-30 3 views
0

У меня есть пользовательский подкласс UIView, который называется CustomRectangle. Я создаю экземпляр этого объекта в ViewController и создаю все его ограничения в ViewController. Моя цель - создать все ограничения внутри этого подкласса UIView программно. Проблема в том, что я не знаю, как установить ограничения там, потому что у меня нет ссылки на какой-либо другой вид в Storyboard.Где добавить программные ограничения в подкласс UIView?

Например, если я хочу, чтобы мой взгляд CustomRectangle быть сосредоточен на основе другой точки зрения, я хотел бы создать в ViewController в @IBOutlet для другого вида, а затем использовать его в центре CustomRectangle. Я не знаю, можно ли это сделать в подклассе UIView.

Я хочу сделать это на основе архитектуры MVC (Model View Controller).

Какова наилучшая практика для этого? Есть идеи, как это сделать?

+0

Возможно, вы можете переопределить метод 'didMoveToSuperview:' и создать там ограничения –

+0

Как бы я это сделал? Я хочу сказать, что если я хочу сосредоточить свое пользовательское представление под названием «CustomRectangle» на основе другого представления, как это сделать? Я не уверен, как это сделать на основе MVC. – JEL

+0

в CustomRectangle дают ограничения ваших просмотров –

ответ

0

вы должны использовать initWithFrame метод CustomRectangle для этого.

для emample в UIView's Subclass,

- (id)initWithFrame:(CGRect)frame{ 

self = [super initWithFrame: frame]; 

if (self) { 


    [self setFrame:CGRectMake(0, 0, 50, 50)]; 
    //add constraint here for example 

    [self addConstraint:[NSLayoutConstraint constraintWithItem:self attribute:NSLayoutAttributeWidth relatedBy:NSLayoutRelationEqual toItem:nil attribute: NSLayoutAttributeNotAnAttribute multiplier:1 constant:50]]; 

} 
return self; 
} 

Преобразовать в скор это цель с кода !!

Надеется, что это поможет :)

+1

Спасибо, что ответили! Как установить эти ограничения по отношению к другим вещам? Не уверен, имею ли я смысл. В принципе, если я хочу, чтобы «CustomRectangle» был привязан к нижней части UIButton, я не знаю, как получить ссылку на этот UIButton, поскольку все выделено в этом подклассе UIView. – JEL

0

Есть несколько вещей, которые вы должны сделать:

  1. Не забудьте установить translatesAutoresizingMaskIntoConstraints = NO для ограничения работы. Однако, если вы считаете, что метод autolayout выглядит так, внутри вашего представления вы должны использовать автозапуск для своих подзонов, а представление, создающее ваше представление, должно добавить ограничения для customRectangle (aka widht, alignment и т. Д.).
  2. В методе init вы можете просто добавьте ограничения, которые зависят только от вашего представления. Другие ограничения следует добавлять извне.

Для примера:

CustomRectangle *customRectangle = [[CustomRectangle *customRectangle alloc] init]; 
// just to be sure 
customRectangle.translatesAutoresizingMaskIntoConstraints = NO; 
// just as an example 
[self.view addConstraints[NSLayoutConstraint constraintWithItem:customRectangle attribute:NSLayoutAttributeRight relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeRight multiplier:1.0 constant:0]]; 

Надеется, что это помогает !!

+0

Когда вы говорите: «Другие ограничения следует добавлять извне», может ли это быть «ViewController»? Я создаю экземпляр 'CustomRectangle' в' ViewController', это где я бы поставил ограничения для него, и если да, то где бы вы его выразили, в 'viewWillAppear'? – JEL

+0

Это зависит от того, какой подход вы используете. Например, если ваш CustomRectangle является подзором другого представления, вы должны сделать это в методе init этого представления. Если вы делаете это внутри ViewController, это зависит от ограничения, но, вероятно, лучшее место в viewDidLoad. – facumenzella

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