Как я могу просмотреть вложенный просмотр с индикатором активности?

#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 методах