iPhone: изменение вида, когда пользователь встряхивает
Я разрабатываю приложение для 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 ответа
Чтобы проверить, не потрясен ли телефон, вашему классу придется использовать протокол 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 в соответствии с вашими потребностями.
Проверьте эти методы /API:
- (void)motionBegan:(UIEventSubtype)motion withEvent:(UIEvent *)event
- (void)motionCancelled:(UIEventSubtype)motion withEvent:(UIEvent *)event
- (void)motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event
Это обработчики событий, предназначенные для распознавания движения. Просмотрите этот документ, прежде чем использовать их.