2016-09-08 2 views
0

Я использую отдельный UIView класс, который инициирующий от awakeFromNib Это иерархии вида моего пользовательского класса, в котором я должен добавить собственные взгляды contentView. Я не получаю, как добавить свои customViews в качестве подзонов в contentView.Как добавить UIViews к моему contentView (AwakeFromNib)

View Hierarchy

Это попытка я сделал, и я не смог в ней.

#pragma mark - UINibLoading 
-(void)awakeFromNib { 
scrollView.translatesAutoresizingMaskIntoConstraints = NO; 
[self loadViewIntoMemory]; 
[self formUpdateDetailsData]; 
} 

#pragma mark - Private 
- (void)loadViewIntoMemory { 
[[NSBundle mainBundle] loadNibNamed:NSStringFromClass([self class]) owner:self options:nil]; 
[self addSubview:contentView]; 
} 

- (void)formUpdateDetailsData { 
for (int i = 1; i < 5; i++) { 
    inputTextView = [[UIView alloc] initWithFrame:CGRectMake(15, ((i*44)+(i*15)), inputTextView.frame.size.width, 44)]; 
    [contentView addSubview:inputTextView]; 
} 
for (int i = 5; i < 10; i++) { 
    inputPickerView = [[UIView alloc] initWithFrame:CGRectMake(15, ((i*44)+(i*15)), inputPickerView.frame.size.width, 44)]; 
    [contentView addSubview:inputPickerView]; 
} 
} 
+0

Что вы делаете в этом классе, как вы загружаете этот класс в свой ViewController. Также в режиме loadViewIntoMemory вы снова загружаете Nib. этот метод вызовет awakeFromNib, таким образом, вот цикл. –

+0

Этот класс будет загружаться через awakeFromNib –

+1

. Здесь основная проблема заключается в вызове loadNibNamed в loadViewIntoMemory, который вызывает awakeFromNib. И awakeFromNib затем вызывает loadViewIntoMemory, и поэтому это бесконечный цикл. Проверьте эту вещь, помещая точку останова на оба ваших метода, тогда вы будете знать, как этот код выполняется. –

ответ

0

Попытка написать метод инициализации, который вернет вас, ваш заказ UIView загрузка из файла .xib,

- (instancetype)initYourView { 
    return [[NSBundle mainBundle] loadNibNamed:NSStringFromClass([self class]) owner:nil options:nil].firstObject; 
} 
+0

Что такое firstObject? Как я узнаю, что это мой требуемый вид? –

+0

Если у вас есть путаница, Лучшая практика, чтобы сделать что-то вроде этого, + (идентификатор) loadNibNamed: (NSString *) nibName ofClass: (класс) objClass { если (nibName && objClass) { NSArray * объекты = [ [NSBundle mainBundle] loadNibNamed: nibName владелец: nil опции: nil]; для (id currentObject в объектах) { if ([currentObject isKindOfClass: objClass]) return currentObject; } } return nil; } – shuvo

0

меня понять следующее Вы создали один .xib файлов С тремя зрения в что 1. ContentView 2. input textview 3. Вид выбора входных данных

Теперь вы хотите добавить представление ввода и представление выбора входа в свой контент.

Теперь вы можете сделать это двумя способами: 1. Вы создаете IBOutlet для просмотра текстового вида ввода и выбора входных данных и добавили их в виде содержимого.

  1. Вы создаете объект вида и добавляете subview в виде контента таким образом.

    - (void)loadInputViewInMemory{ 
    
    UIView *inputView =[[[NSBundle mainBundle]loadNibNamed:@"CustomView" owner:nil options:nil]objectAtIndex:1]; 
    [self addSubview:inputView]; 
    
    
    [self addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"|[inputView]|" options:0 metrics:0 views:[NSDictionary dictionaryWithObjectsAndKeys:inputView,@"inputView",nil]]]; 
    [self addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[inputView]|" options:0 metrics:0 views:[NSDictionary dictionaryWithObjectsAndKeys:inputView,@"inputView",nil]]]; 
    
    } 
    

теперь называют этот метод с пользовательским видом объектом, который вы создали на ViewController.

Пример

ViewController Код ввиду сделал нагрузки или где вы хотите добавить пользовательский вид

// You custom view in your case content view. 
CustomView *customView = [[[NSBundle mainBundle]loadNibNamed:@"CustomView" owner:self options:nil]objectAtIndex:0]; 
[self.view addSubview:customView]; 
customView.translatesAutoresizingMaskIntoConstraints = false; 

[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"|[customView]|" options:0 metrics:0 views:[NSDictionary dictionaryWithObjectsAndKeys:customView,@"customView",nil]]]; 
[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[customView]|" options:0 metrics:0 views:[NSDictionary dictionaryWithObjectsAndKeys:customView,@"customView",nil]]]; 

//Call Methods from here instead of calling from awake from nib 


[customView loadInputViewInMemory]; 

Точно так же вы можете вызвать пользовательский вид сборщика добавить методы вы должны изменения индекс до 2 для представления сборщика

Нравится,

UIView *inputView =[[[NSBundle mainBundle]loadNibNamed:@"CustomView" owner:nil options:nil]objectAtIndex:2]; 

Надеюсь, это поможет вам.