iOS - запрос при переходе из представления - PullRequest
0 голосов
/ 23 декабря 2011

У меня есть UINavigationController внутри UITabBarController. В навигационном контроллере есть UITableView и форма для редактирования элементов. Проблема заключается в том, что если во время редактирования коснуться вкладки, форма просто очищается, а пользователь возвращается в UITableView.

Есть ли способ добавить подсказку для подтверждения навигации вне представления редактирования?

Ответы [ 3 ]

1 голос
/ 23 декабря 2011

Сначала объявите BOOL в вашем .h, чтобы сохранить состояние редактирования.Также объявите временную переменную, которую мы будем использовать позже для хранения выбранной строки.

BOOL isEditing;
NSUInteger selectedRow; 

В вашем viewDidLoad инициализируйте логическое значение как NO

- (void)viewDidLoad {
    // initialization
    isEditing = NO;

    [super viewDidLoad];
}

Затем вы можете согласовать свое представлениеконтроллер на UITextFieldDelegate и UIAlertViewDelegate.Делегат текстового поля позволяет контроллеру получать обратные вызовы, когда редактирование заканчивается и начинается для текстовых полей, а делегат представления предупреждений позволяет ему получать обратные вызовы, когда просмотр предупреждений отклоняется.

@interface MyController : UIViewController <UITextFieldDelegate, UIAlertViewDelegate>

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

textField.delegate = self;

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

- (void)textFieldDidBeginEditing:(UITextField *)textField {
    isEditing = YES;
}

- (void)textFieldDidEndEditing:(UITextField *)textField {
    isEditing = NO;
}

Теперь ключевым моментом является создание отдельного метода для перехода к следующему представлению, поэтому просто сделайте что-то вроде этого (как вы обычно делаете, когда выбрана строка представления таблицы):

- (void)showNextView {
    // in this method create the child view controller and push it
    // like you would normally when a cell is selected
    // to get the selected row, use the `selectedRow` variable
    // we declared earlier.
}

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

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    selectedRow = [indexPath row];

    if (isEditing) {
        UIAlertView *alert = [[UIAlertView alloc] 
                     initWithTitle:@"Continue Editing?"
                     message:@"Continue Editing or discard edits"
                     delegate:self
                     cancelButtonTitle:@"Discard"
                     otherButtonTitles:@"Continue"];
        [alert show];
        [alert release];
        return;
    }
    [self showNextView];
}

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

- (void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex {
    if (buttonIndex != [alertView cancelButtonIndex]) return; // stay editing
    [self showNextView];
}

Надеюсь, что все это имеет смысл и полезно для вас!

0 голосов
/ 25 февраля 2012

Я решил это в конце концов, используя пользовательский UIBarButtonItem, который выглядит как стрелка назад.

0 голосов
/ 23 декабря 2011

Поскольку вы используете UINavigationController, если вы помещаете эту «форму» в стек, вы можете установить

@property(nonatomic) BOOL hidesBottomBarWhenPushed

Таким образом панель вкладок будет скрыта, пока они не будут выполнены с формой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...