iPhone: изменение вида, когда пользователь встряхивает - PullRequest
0 голосов
/ 02 июня 2010

Я разрабатываю приложение для iPhone, которое удаляет строки из табличного представления, когда пользователь встряхивает телефон. Я создал навигационный проект. Теперь, когда пользователь встряхивает iPhone, я хочу, чтобы заголовок панели навигации изменился на «УДАЛИТЬ», а кнопка удаления появится на панели навигации в том же виде. В противном случае, когда пользователь выбирает конкретную строку, он должен перейти к следующему представлению. Я написал следующий код, но он не работает. Пожалуйста, помогите мне.

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{
    if (isShaked == NO) 
    {       
    //logic to move to next view goes here.
    }   
    else 
    {

        self.title = @"Delete Rows";
        delete=[[UIBarButtonItem alloc] initWithTitle:@"Delete rows" style:  
UIBarButtonItemStyleBordered  target:self action:@selector(deleteItemsSelected)] ;

                 self.navigationItem.rightBarButtonItem=self.delete;
        MyTableCell *targetCustomCell = (MyTableCell *)[tableView  cellForRowAtIndexPath:indexPath];
        [targetCustomCell checkAction];
        [self.tempArray addObject: [myModal.listOfStates objectAtIndex:indexPath.row]];

        //[delete addTarget:self action:@selector(deleteItemsSelected:) forControlEvents:UIControlEventTouchUpInside];

        self.tempTableView = tableView;
    }
}

-(void)deleteItemsSelected
{
    [myModal.listOfStates removeObjectsInArray:tempArray];
    [tempTableView reloadData];
}

checkAction - это метод пользовательской ячейки, который используется для отметки в выбранной строке.

Ответы [ 2 ]

0 голосов
/ 25 октября 2010

Проверьте эти методы / API:

- (void)motionBegan:(UIEventSubtype)motion withEvent:(UIEvent *)event

- (void)motionCancelled:(UIEventSubtype)motion withEvent:(UIEvent *)event

- (void)motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event

Это обработчики событий, предназначенные для распознавания движения. Просмотрите документ, прежде чем использовать их.

0 голосов
/ 02 июля 2010

Чтобы проверить, не потрясен ли телефон, вашему классу придется использовать протокол UIAccelerometerDelegate.

Например:

@interface myTableViewClass : UITableView <UIAccelerometerDelegate>

Затем вы должны быть в состоянии определить, когда телефон встряхнулся (я использую это в моем viewDidLoad):

[[UIAccelerometer sharedAccelerometer] setDelegate:self];
[[UIAccelerometer sharedAccelerometer] setUpdateInterval:0.1];

Как только пользователь встряхивает телефон, вы можете творить чудеса следующим способом:

- (void)accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration 
{   
    if(fabsf(acceleration.x) > 2.2 || fabsf(acceleration.y) > 2.2 || fabsf(acceleration.z) > 2.2){
        //The user has shaken the iPhone
    }
}

Очевидно, что вы можете изменить интервал для более частой проверки и изменения параметров акселерометра: метод didAccelerate в соответствии с вашими потребностями.

...