Лист действий не увольняется - PullRequest
0 голосов
/ 10 декабря 2010

Я недавно написал класс, который представляет пользовательскую таблицу uiactions from tablecell, в этой таблице действий есть окно выбора и панель инструментов. При нажатии кнопки «Готово» на панели инструментов отправляется уведомление со значением выбранного средства выбора, а список действий отклоняется. Иногда лист действий исчезает из вида при нажатии кнопки «Готово», однако кажется, что модальное свойство этого листа действий остается, поскольку я не могу ничего выбрать в отображаемом виде. Переход к другой вкладке и возвращение, похоже, решают эту проблему. У кого-нибудь есть идеи, что может быть причиной этого?

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

-(void)doneButtonPressed:(id)sender{



    if ([[self viewWithTag:1] isKindOfClass:[PickerView class]]) {

        PickerView *picker = (PickerView *)[self viewWithTag:1];

        if (picker.selectedRow == nil) {
            [picker populateSelectRowForRow:0 andComponent:0];
        }

        NSNotification *note = [NSNotification notificationWithName:@"doneButtonPressed" object:self.indexPath userInfo:picker.selectedRow];

        [[NSNotificationCenter defaultCenter] postNotification:note];

    }else {

        DatePickerView *picker = (DatePickerView *)[self viewWithTag:1];

        NSDictionary *extraInfo = [[NSDictionary alloc] initWithObjects:[[NSArray alloc] initWithObjects:[self formatDateToString:[picker date]], nil] forKeys:[[NSArray alloc] initWithObjects:@"value", nil]];

        NSNotification *note = [NSNotification notificationWithName:@"doneButtonPressed" object:self.indexPath userInfo:extraInfo];

        [[NSNotificationCenter defaultCenter] postNotification:note];
    }


    [self dismissWithClickedButtonIndex:0 animated:YES];
}

и метод уведомления, который называется:

-(void)pickerUpdate:(NSNotification *)note{

    NSIndexPath *indexPath = [note object];
    NSDictionary *extraInfo = [note userInfo];

    NSDictionary *dict = [[tableController.sectionAndFields objectAtIndex:indexPath.section] objectAtIndex:(indexPath.row + kHeaderAndFooterOffset)];

    [tableController.formDetails setObject:[extraInfo objectForKey:@"value"] forKey:[dict objectForKey:@"key"]];

    NSArray *reloadArray = [[NSArray alloc] initWithObjects:indexPath, nil];
    [indexPath release];

    [self.tv reloadRowsAtIndexPaths:reloadArray withRowAnimation:NO];
    [reloadArray release];


}

Спасибо, что нашли время прочитать этот довольно длинный пост, Будет

Ответы [ 2 ]

0 голосов
/ 10 декабря 2010

Мне удалось решить эту проблему, но это очень похоже на взлом. Я ввел задержку в код, используя:

[self performSelector:@selector(dismissFromActionSheet) withObject:nil afterDelay:0.2];

С dismissFromActionSheet:

-(void)dismissFromActionSheet{
 [self dismissWithClickedButtonIndex:0 animated:YES];
}
0 голосов
/ 10 декабря 2010

Насколько я знаю, вы должны метод actionSheet: clickedButtonAtIndex ..

-(IBAction)showActionSheet:(id)sender {
    UIActionSheet *sheet = [[UIActionSheet alloc] initWithTitle:@"Title" delegate:self cancelButtonTitle:@"Cancel Button" destructiveButtonTitle:@"Destructive Button" otherButtonTitles:@"Other Button 1", @"Other Button 2", nil];
    sheet.actionSheetStyle = UIActionSheetStyleBlackOpaque;
    [sheet showInView:self.view];
    [sheet release];
}

-(void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex {
    if (buttonIndex == 0) {
        self.label.text = @"Destructive Button Clicked";
    } else if (buttonIndex == 1) {
        self.label.text = @"Other Button 1 Clicked";
    } else if (buttonIndex == 2) {
        self.label.text = @"Other Button 2 Clicked";
    } else if (buttonIndex == 3) {
        self.label.text = @"Cancel Button Clicked";
    }
}
...