#iphone #objective-c #cocoa-touch #xcode
#iPhone #objective-c #cocoa-touch #xcode
Вопрос:
Мне нужно просмотреть вложенный просмотр с индикатором активности. Это мой код, но вложенный просмотр не отображается:
@interface ProgressViewController : UIViewController {
IBOutlet UIActivityIndicatorView *myActivityIndicator;
}
@property (nonatomic, retain) IBOutlet UIActivityIndicatorView *myActivityIndicator;
@end
@implementation ProgressViewController
@synthesize myActivityIndicator;
- (void)viewDidLoad {
[myActivityIndicator startAnimating];
[super viewDidLoad];
}
- (void)viewWillDisappear:(BOOL)animated {
[myActivityIndicator stopAnimating];
}
@end
#import "ProgressViewController.h"
@interface MyViewController : UIViewController {
ProgressViewController *progressViewController;
}
@property (nonatomic, retain) ProgressViewController *progressViewController;
@end
@implementation MyViewController
@synthesize progressViewController
- (void)viewDidLoad
{
progressViewController = [[ProgressViewController alloc] initWithNibName:@"ProgressViewController" bundle:nil];
[self.view addSubview:progressViewController.view];
sleep(4);
[progressViewController.view removeFromSuperview];
[super viewDidLoad];
}
@end
Комментарии:
1. У вас есть XIB, подключенный к этому коду?
Ответ №1:
Причин может быть несколько, и из отправленного вами кода все еще немного неясно, какая именно.
Во-первых, вы не должны использовать sleep (4) в своем коде — это портит работу движка приложений, который iOS запускает для поддержки пользовательского ввода, обновления экрана и т.д. Ваш код можно легко изменить на:
[self performSelector:@selector(removeMyProgressView:) withObject:progressViewController.view afterDelay:4.0];
и removeFromSuperview в вашей функции removeMyProgressView:.
Кроме того, эта строка кода содержит ошибки:
progressViewController = [[ProgressViewController alloc] initWithNibName:@"ProgressViewController" bundle:nil];
Это должно быть
self.progressViewController = [[ProgressViewController alloc] initWithNibName:@"ProgressViewController" bundle:nil];
В противном случае вы не вызываете функцию установки (свойство @sythesized), и объект не сохраняется. Возможно, он выпущен, и поэтому вы его не видите.
Если ничего из этого не подходит, мы продолжим работать над этим 🙂
Удачи!
Передано.
Ответ №2:
Все в вашем методе viewDidLoad происходит за один цикл выполнения. Это означает, что вы добавляете и удаляете индикатор активности, не давая системе возможности фактически отобразить его. 4 секунды ожидания не помогают. Из-за этого выполнение цикла выполнения занимает больше времени.
Ответ №3:
вызывайте [super viewDidLoad]
перед чем-либо в - (void)viewDidLoad
методах