Загрузка представления в UIScrollView И запуск содержимого внутри для работы

#iphone #ios #uiscrollview

#iPhone #iOS #uiscrollview

Вопрос:

У меня есть приложение на основе вкладок, над которым я работаю.

У меня есть контроллер представления с именем DetailsView.m и сопутствующим файлом nib с именем DetailsView.xib. В нем есть пара UILabels, которые связаны с помощью IBOutlet с контроллером просмотра DetailsView.m. Когда я загружаю этот контроллер представления с помощью контроллера панели вкладок, он работает нормально, и UILabels заполняются динамически.

Теперь я хочу загрузить все это представление внутрь UIScrollView, чтобы вместо этого я мог разместить больше содержимого.

Итак, я создал другой контроллер представления с именем DetailsHolder.m с файлом nib с именем DetailsHolder.xib и назначил его контроллеру панели вкладок.

Я написал этот код ниже, чтобы загрузить первое представление (DetailsView) в UIScrollView во втором представлении (DetailsHolder). Я написал это в методе viewDidLoad DetailsHolder:

 DetailsView* detailsView = [[DetailsView alloc] initWithNibName:@"DetailsView" bundle: nil];
CGRect rect = detailsView.view.frame;
CGSize size = rect.size;
[scrollView addSubview: detailsView.view];    
scrollView.contentSize = CGSizeMake(320, size.height);
  

Это корректно загружает вспомогательный вид в UIScrollView, однако метки внутри DetailsView больше ничего не делают. Когда я помещаю NSLog в viewDidLoad из DetailsView — он никогда ничего не регистрирует. Это как если бы я загрузил перо нормально, но оно больше не связано с контроллером представления. Чего мне здесь не хватает? Я немного новичок в obj C / iOS (но обладаю многолетними знаниями Actionscript / Javascript.

Заранее спасибо,

Богатый

Редактировать: содержимое DetailsView в соответствии с запросом:

DetailsView.h:

 #import <UIKit/UIKit.h>
#import "AppModel.h"

@interface DetailsView : UIViewController {
    IBOutlet UITextView* textView;
    IBOutlet UIImageView* imageView;
}

@end
  

DetailsView.m

 #import "DetailsView.h"

@implementation DetailsView

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // Custom initialization
    }
    return self;
}

- (void)dealloc
{
    [super dealloc];
}

- (void)didReceiveMemoryWarning
{
    // Releases the view if it doesn't have a superview.
    [super didReceiveMemoryWarning];

    // Release any cached data, images, etc that aren't in use.
}

#pragma mark - View lifecycle

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view from its nib.
}

- (void)viewWillAppear:(BOOL)animated
{
    AppModel* model = [AppModel sharedInstance];

    [model loadData];

    int selectedLocation = [model getSelectedLocation];
    NSArray *locations = [model getLocations];
    NSArray *data = [locations objectAtIndex:selectedLocation];

    textView.text = [data objectAtIndex: 0];


    UIImage *theImage = [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:[data objectAtIndex: 4] ofType:@"jpg"]];

    imageView.image = theImage;

}

- (void)viewDidUnload
{
    [super viewDidUnload];
    // Release any retained subviews of the main view.
    // e.g. self.myOutlet = nil;
}

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    // Return YES for supported orientations
    return (interfaceOrientation == UIInterfaceOrientationPortrait);
}

@end
  

По сути, все, что он делает, — это извлекает selectedLocation (int) из синглтона (который является моей моделью), затем извлекает массив из модели, а затем пытается вставить изображение и некоторый текст в мое представление. В моем файле nib у меня есть UIImageView и UITextView, которые я связал с двумя IBOutlets, объявленными в DetailsView.h

Ответ №1:

Когда вы используете контроллер представления подобным образом, многие события не будут происходить в контроллере представления, например viewWillAppear, viewWillDisappear и событие поворота устройства. Я предполагаю, что вы выполнили некоторую инициализацию в некоторых из этих методов событий. Публикация вашего кода для DetailsView упростила бы поиск проблемы.

Комментарии:

1. Большое спасибо, Тиа. Я отредактировал исходное сообщение, чтобы включить представление «Источник сведений» в соответствии с запросом.

2. Теперь ясно, что у вас есть viewWillAppear метод, который не будет выполнен. Вы могли бы исправить это, вызвав его непосредственно перед добавлением в scrollview.