2015-02-10 5 views
1

Мне интересно, можно ли получить указатель на ограничение, созданное с использованием языка визуального формата.Указатель на язык визуального форматирования (VFL) Ограничение?

Для простого примера предположим, что я создал массив ограничений для представления, чтобы он был прикреплен к верхнему, левому и нижнему его супер-представлению, но имеет ширину 100, и я хотел получить указатель на это ограничение ширины, чтобы впоследствии изменить его.

дефектоскоп для этого было бы что-то вдоль линий:

UIView *insertedView = [[UIView alloc] init]; 
insertedView.translatesAutoresizingMaskIntoConstraints = NO; 
[self.view addSubview: insertedView]; 

NSDictionary *views = NSDictionaryOfVariableBindings(insertedView); 
NSDictionary *metrics = @{ @"viewWidth" : @(100.0) }; 

NSArray *constraintsH = [NSLayoutConstraint constraintsWithVisualFormat:@"|[insertedView(viewWidth)" options:0 metrics:metrics views:views]; 

NSArray *constraintsV = [NSLayoutConstraint constraintsWithVisualFormat:@"V:|[insertedView]|" options:0 metrics:nil views:views]; 

[self.view addConstraints: constraintsH]; 
[self.view addConstraints: constraintsV]; 

Можно ли получить экземпляр NSLayoutConstraint, указывающий на ограничение ширины 100.0 в приведенном выше примере?

Я знаю, что я мог бы обойти это другим путем, создав ограничение ширины отдельно через constraintWithItem: attribute: relatedBy: toItem: attribute: multiplier: constant, но мне любопытно, есть ли способ для этого с помощью чистый VFL.

ответ

1

Один из способов сделать это с NSArray «s - objectAtIndex: и - indexOfObjectPassingTest::

NSUInteger index = [constraints indexOfObjectPassingTest:^BOOL(id obj, NSUInteger idx, BOOL *stop) { 
    return ((NSLayoutConstraint *)obj).firstAttribute == NSLayoutAttributeWidth; 
}]; 

NSLayoutConstraint *widthConstraint = [constraints objectAtIndex:index]; 

Если у вас есть несколько ограничений по ширине (например, с различными приоритетами, например), вы можете просто сделать тест в блок более конкретный.

+0

Удивительный, за все время разработки приложений для iOS я никогда не сталкивался с этим методом в NSArrays, классный материал. Благодарю. –

+0

Интересно, есть ли способ установить свойство идентификатора ограничения с помощью VFL. Вероятно, это был бы самый быстрый способ захватить рассматриваемое ограничение, используя ваш метод. –

+0

Согласовано. Сначала мне хотелось найти способ сделать это, поскольку я думаю, что это самое простое, но я не могу видеть из документации, как это можно сделать. – akivajgordon

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