Закрытие панели вкладок контроллеров - PullRequest
0 голосов
/ 04 апреля 2011

Я довольно новичок в программировании на iphone.Я столкнулся с проблемой при использовании контроллера панели вкладок, которую не могу решить.У меня есть приложение с 2 вкладками, каждая вкладка использует отдельные файлы классов и перья.Я использую жест встряхивания, чтобы сказать приложению, что нужно что-то делать, но когда я переключился со второй вкладки обратно на первую, встряхнул телефон, он выполняет действие второго, а не текущего вида, текущий вид остается неизменным после встряхивания.

Я что-то здесь упускаю?Нужно ли что-то выпустить?

Заранее благодарим за любую помощь, которую вы можете предложить.

FirstViewController.m:

    #import "FirstViewController.h"
#import <AudioToolbox/AudioToolbox.h>


@implementation FirstViewController
@synthesize label;

- (void)accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration{

    if (fabsf(acceleration.x) > 2.0
        || fabsf(acceleration.y) > 2.0
        || fabsf(acceleration.z) > 2.0) {
            label.text = @"Shake"; 


}


- (void)viewDidLoad {

    UIAccelerometer *accelerometer = [UIAccelerometer sharedAccelerometer];
    accelerometer.delegate = self;
    accelerometer.updateInterval = 1.0f/60.0f;
    [super viewDidLoad];

}


- (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.
}

- (void)viewDidUnload {

}


- (void)dealloc {
    [super dealloc];

}

@end

SecondViewController.m

#import "SecondViewController.h"
#import <AudioToolbox/AudioToolbox.h>

@implementation SecondViewController
@synthesize label2;

- (void)accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration{

    if (fabsf(acceleration.x) > 2.0
        || fabsf(acceleration.y) > 2.0
        || fabsf(acceleration.z) > 2.0) {
        label2.text = @"Shake View 2"; 


}


- (void)viewDidLoad {

    UIAccelerometer *accelerometer = [UIAccelerometer sharedAccelerometer];
    accelerometer.delegate = self;
    accelerometer.updateInterval = 1.0f/60.0f;
    [super viewDidLoad];

}


- (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.
}

- (void)viewDidUnload {

}


- (void)dealloc {
    [super dealloc];

}

@end

Ответы [ 2 ]

0 голосов
/ 04 апреля 2011

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

Вы можете попробовать установить его методом - viewDidAppear:animated. Если это также не помогло, взгляните на протокол UITabBarControllerDelegate и метод – tabBarController:didSelectViewController:. Сначала необходимо создать и назначить делегат контроллера панели вкладок, затем реализовать метод. Это может выглядеть примерно так:

- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController
{
  if([viewController respondsToSelector:@sel(wasSelectedFromTabBar)]){
    [viewController wasSelectedFromTabBar]
  }
}

Затем в контроллерах вида назначьте делегат акселерометра в методе wasSelectedFromTabBar. Надеюсь, что это работает!

0 голосов
/ 04 апреля 2011

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

Добавьте этот код к обоим вашим контроллерам представлений, и при переключении на каждый из них они станут первым респондентом.1004 *

...