У меня довольно забавная проблема, которая включает loadView
, viewDidLoad
, viewWillAppear
и состояние ивара. У меня есть приложение на основе навигации. И из моего первого уровня просмотра у меня есть список таблиц, а затем я нажимаю на одну из ячеек, и я перехожу на второй уровень (подробный вид). Когда я нажимаю на ячейку, я также добавляю объект «Office
» (который содержит строки типа streetAddress
и boxAddress
) в контроллер представления, который выдвигается. Затем я заполняю подробный вид содержимым объекта Office
, например [box setText:[self.office boxAddress]];
(поле - UILabel). Теперь я хочу добиться того, чтобы иногда stringValue boxAddress было пустым, и в этих случаях я не хочу добавлять пустую строку в UILabel, вместо этого я хочу переместить следующую UILabel вверх (и занять место boxAddress). Поэтому я сделал условную проверку, чтобы увидеть, пусто ли boxAddress
, если это так, нужно установить UILabel
s с конкретными координатами, а если оно не пустое, установить UILabel
s с другими конкретными координатами.
Я понимаю, что вы должны использовать viewWillAppear
, если вы хотите, чтобы код запускался при каждой загрузке представления. Но почему-то кажется, что viewWillAppear
запускается только тогда, когда строка boxAddress
пуста. И если я щелкну ячейку с пустой boxAddress
, она будет использовать значение из boxAddress
из последней ячейки, которую я щелкнул, у которой была непустая boxAddress
.
Я вставлю свой код сюда, чтобы посмотреть, сможете ли вы дать мне указатель на то, что я здесь делаю неправильно.
// Implement loadView to create a view hierarchy programmatically,
// without using a nib.
- (void)loadView {
//allocate the view
self.view = [[UIView alloc] initWithFrame:[[UIScreen mainScreen] applicationFrame]];
//set the view's background color
self.view.backgroundColor = [UIColor whiteColor];
}
- (void)viewDidLoad
{
//add the labels
name = [[UILabel alloc] initWithFrame:CGRectMake(10.0,10.0,320.0,20.0)];
[name setBackgroundColor:[UIColor clearColor]];
[name setTextColor:[UIColor blackColor]];
street = [[UILabel alloc] initWithFrame:CGRectMake(10.0,30.0,320.0,20.0)];
[street setBackgroundColor:[UIColor clearColor]];
[street setTextColor:[UIColor blackColor]];
//if no box address, move up the rest of the addresses
if ([[self.office boxAddress] length] == 0) {
zip = [[UILabel alloc] initWithFrame:CGRectMake(10.0,50.0,320.0,20.0)];
[zip setBackgroundColor:[UIColor clearColor]];
[zip setTextColor:[UIColor blackColor]];
phone = [[UILabel alloc] initWithFrame:CGRectMake(10.0,70.0,320.0,20.0)];
[phone setBackgroundColor:[UIColor clearColor]];
[phone setTextColor:[UIColor blackColor]];
fax = [[UILabel alloc] initWithFrame:CGRectMake(10.0,90.0,320.0,20.0)];
[fax setBackgroundColor:[UIColor clearColor]];
[fax setTextColor:[UIColor blackColor]];
[self.view addSubview:name];
[self.view addSubview:street];
[self.view addSubview:zip];
[self.view addSubview:phone];
[self.view addSubview:fax];
} else {
box = [[UILabel alloc] initWithFrame:CGRectMake(10.0,50.0,320.0,20.0)];
[box setBackgroundColor:[UIColor clearColor]];
[box setTextColor:[UIColor blackColor]];
zip = [[UILabel alloc] initWithFrame:CGRectMake(10.0,70.0,320.0,20.0)];
[zip setBackgroundColor:[UIColor clearColor]];
[zip setTextColor:[UIColor blackColor]];
phone = [[UILabel alloc] initWithFrame:CGRectMake(10.0,90.0,320.0,20.0)];
[phone setBackgroundColor:[UIColor clearColor]];
[phone setTextColor:[UIColor blackColor]];
fax = [[UILabel alloc] initWithFrame:CGRectMake(10.0,110.0,320.0,20.0)];
[fax setBackgroundColor:[UIColor clearColor]];
[fax setTextColor:[UIColor blackColor]];
[self.view addSubview:name];
[self.view addSubview:street];
[self.view addSubview:box];
[self.view addSubview:zip];
[self.view addSubview:phone];
[self.view addSubview:fax];
}
[super viewDidLoad];
// Do any additional setup after loading the view from its nib.
}
// viewWillAppear method is run every time the view is loaded as opposite to the viewDidLoad method which only is run once
// in this program DisclosureDetail view needs to be loaded for each detail view with different content each time
- (void)viewWillAppear:(BOOL)animated {
NSLog(@"%@", [self.office boxAddress]);
[name setText:[self.office name]];
[street setText:[self.office streetAddress]];
if ([[self.office boxAddress] length] > 0) {
[box setText:[self.office boxAddress]];
}
[zip setText:[NSString stringWithFormat:@"%@ %@", [self.office zipCode], [self.office city]]];
[phone setText:[self.office phoneNo]];
[fax setText:[self.office faxNo]];
[super viewWillAppear:animated];
}