Отображать индикатор активности только после нажатия кнопки

привет, я пытаюсь просмотреть индикатор активности, нажав кнопку. Я пытался, но у меня есть некоторые проблемы. Если я перетаскиваю индикатор активности на свою раскадровку, но он виден во время работы моего приложения, я хочу отображать его при нажатии кнопки. в моем приложении я даю возможность загрузки фотографий. Поэтому, если они нажмут кнопку загрузки, я хочу просмотреть индикатор активности. ..

это код, который я устал, но он не работает.

это мой файл h, в котором я реализовал индикатор активности и кнопку.

- (IBAction)click:(id)sender;
 @property (strong, nonatomic) IBOutlet UIActivityIndicatorView *spinner;

это код, который я использовал в своем файле m...

-(void)temp
{
 spinner = [[UIActivityIndicatorView alloc]initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge];
 spinner.frame = CGRectMake(0.0, 0.0, 40.0, 40.0);
 [spinner setCenter:CGPointMake(480/2.0, 128.0/2)]; // (mid of screen) I do this because I'm in landscape mode
 [self.view addSubview:spinner];
 [spinner startAnimating];
 [spinner release];
}

и я вызываю эту функцию в моей кнопке..

- (IBAction)click:(id)sender {
[self temp];
}

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

[yourView addSubview:spinner]; 

по-вашему, я даю свое имя uiviewcontroller, но оно дает ошибку, которую я изменил на

[self.view addSubview:spinner];

Пожалуйста, скажите мне, где я делаю неправильно и как правильно это сделать .. спасибо


person kumar    schedule 20.02.2014    source источник
comment
что происходит, когда вы нажимаете эту кнопку?   -  person Suryakant Sharma    schedule 20.02.2014
comment
ничего не происходит, индикатор активности не работает @SuryakantSharma   -  person kumar    schedule 20.02.2014
comment
индикатор активности вообще не отображался?   -  person Suryakant Sharma    schedule 20.02.2014
comment
Если у вас есть счетчик, подключенный к вашему представлению, зачем вам нужно добавлять его в качестве дополнительного представления? Нет никакого смысла. В качестве альтернативы вы можете создать новый, который не связан с вашим представлением.   -  person Idan Moshe    schedule 20.02.2014
comment
не то что @SuryakantSharma не отображается   -  person kumar    schedule 20.02.2014
comment
да, @IdanMoshe прав, если вы добавили индикатор активности в свой xib / раскадровку, тогда почему вы снова создаете временный метод?   -  person Suryakant Sharma    schedule 20.02.2014
comment
ты прав, сначала я пробовал без подключения, он не работает, поэтому я пробовал с этим .. @IdanMoshe   -  person kumar    schedule 20.02.2014
comment
пожалуйста проверьте мой ответ!!!   -  person Suryakant Sharma    schedule 20.02.2014
comment
@user3247287 user3247287 Я предполагаю, что ваш счетчик подключен к вашему представлению, пожалуйста, проверьте мой ответ.   -  person Idan Moshe    schedule 20.02.2014


Ответы (4)


У меня проблема... Я думаю, вы добавляете белый индикатор активности в белый вид, поэтому он не отображается, но он точно есть... используйте другой стиль UIActivityIndicatorViewStyleGray

-(void)temp
{
 spinner = [[UIActivityIndicatorView alloc]initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
 spinner.frame = CGRectMake(0.0, 0.0, 40.0, 40.0);
 [spinner setCenter:CGPointMake(480/2.0, 128.0/2)]; // (mid of screen) I do this because I'm in landscape mode
 [self.view addSubview:spinner];
 [spinner startAnimating];
 [spinner release];
}
person Suryakant Sharma    schedule 20.02.2014
comment
@Suryankant Sharama работает, спасибо, но я собираюсь дать некоторое интервью для контроллера активности, пожалуйста, скажите мне, как это сделать. - person kumar; 20.02.2014
comment
жаль, что я не понял тебя. - person Suryakant Sharma; 20.02.2014
comment
использовать - (void)performSelector:(SEL)aSelector withObject:(id)anArgument afterDelay:(NSTimeInterval)delay; - person Suryakant Sharma; 20.02.2014

Прежде всего, поскольку у вас уже есть IBOutlet для счетчика, поэтому не выделяйте новый во временном методе. Измените свой временный метод, чтобы он выглядел следующим образом:

  -(void)temp
    {
      spinner.frame = CGRectMake(0.0, 0.0, 40.0, 40.0);
     [spinner setCenter:CGPointMake(480/2.0, 128.0/2)]; // (mid of screen) I do this because I'm in landscape mode
     [self.view addSubview:spinner];
     [spinner startAnimating];
    }
person Ratikanta Patra    schedule 20.02.2014
comment
подскажите плиз как сделать без iboutlet - person kumar; 20.02.2014
comment
полностью удалите счетчик из XIB и используйте свой оригинальный временный метод. он должен работать - person Ratikanta Patra; 20.02.2014
comment
после удаления этого я получаю сообщение об ошибке, например, использование необъявленного идентификатора «spinner», поэтому, пожалуйста, скажите мне, где я должен объявить счетчик @Ratikanata Patra - person kumar; 20.02.2014
comment
вместо счетчика используйте self.spinner - person Ratikanta Patra; 20.02.2014
comment
да, я пробовал, что одна из них выдает ошибку, например, счетчик объектов не находится в контроллере представления - person kumar; 20.02.2014
comment
вы удалили эту строку :@property (strong, nonatomic) IBOutlet UIActivityIndicatorView *spinner;??? - person Ratikanta Patra; 20.02.2014
comment
s я удалил эту строку @Ratikanata Patra - person kumar; 20.02.2014
comment
верните линию обратно. и удалите IBOutlet, т.е. сохраните эту строку @property (strong, nonatomic)UIActivityIndicatorView *spinner; - person Ratikanta Patra; 20.02.2014
comment
спасибо Ratikanta Patra за помощь в работе. Я использовал приведенный выше код, предоставленный @Suryakant Sharma. - person kumar; 20.02.2014

Если вы используете конструктор интерфейса, такой как Storyboard или XIB, просто установите фрейм и все остальное там. И если вы хотите изменить его свойство во время выполнения, просто используйте IBOutlet, который вы использовали. Вам не нужно создавать экземпляр снова, просто используйте его геттер и сеттер, чтобы использовать его соответственно. Так что здесь вы можете сделать.

- (IBAction)click:(id)sender 
  {
    [self.spinner startAnimating];
  }

и синтезировать spinner перед его использованием.

И если вы хотите использовать его программно, удалите его из XIB и удалите все соответствующие ему ссылки. И объявить в файле .h

UIActivityIndicatorView *spinner;

или вы можете сделать недвижимость

@property(nonatomic, strong)UIActivityIndicatorView *spinner;

и просто используйте свой собственный код.

person Krishna Kumar    schedule 20.02.2014

Предполагая, что ваш счетчик подключен к вашему представлению. В вашем viewDidLoad вы можете настроить свой вид, тогда он будет отображаться, когда вы нажмете кнопку:

- (void)viewDidLoad
{
    [super viewDidLoad];

    self.spinner = [[UIActivityIndicatorView alloc]initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge];
    self.spinner.frame = CGRectMake(0.0, 0.0, 40.0, 40.0);
    [self.spinner setCenter:CGPointMake(480/2.0, 128.0/2)]; // (mid of screen) I do this because I'm in landscape mode
    self.spinner.hidden = YES;
}

- (IBAction)click:(id)sender
{
    self.spinner.hidden = NO;
    [self.spinner startAnimating];

     // Additionally you can show spinner in top bar
    [UIApplication sharedApplication].networkActivityIndicatorVisible = YES;
}

- (void)stopSpinner
{
    if (self.spinner.isAnimating) {
        self.spinner.hidden = YES;
        [self.spinner stopAnimating];

        // And hide it when you don't need it anymore
        [UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
    }
}

Я предлагаю вам увидеть этот ответ: >Как получить высоту и ширину экрана в зависимости от ориентации? чтобы изменить положение счетчика.

person Idan Moshe    schedule 20.02.2014
comment
я сделал это без использования индикатора активности IBOutlet, пожалуйста, скажите мне, как это сделать, я удаляю IBOutlet, он показывает ошибку - person kumar; 20.02.2014
comment
Вы можете «ctrl+перетащить прядильщик в нужное место, используя раскадровку. - person Idan Moshe; 20.02.2014