Пользовательский UIButton для iPhone не может быть удален - PullRequest
1 голос
/ 03 октября 2011

У меня есть пользовательский класс UIButton в моем приложении для навигации по IPhone.Когда пользователь нажимает кнопку, я представляю модальное представление, в котором отображается список записей таблицы, из которых пользователь может выбрать.

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

-(void) touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event{
    dropDownPickerViewController = [[DropDownListingViewController alloc] initWithNibName:@"DropDownListingView" bundle:[NSBundle mainBundle]];
    .....
    .....

[[(AppDelegate_iPhone *)[[UIApplication sharedApplication] delegate] navigationController] presentModalViewController:dropDownPickerViewController animated:NO];
[dropDownPickerViewController release];

[super touchesEnded:touches withEvent:event];
}

Как вы можете видеть, кнопка может быть на любом viewController, поэтому я беру навигационный контроллер из делегата приложения.Чем в моем коде DropDownPickerViewController у меня есть следующее, когда пользователь выбирает запись:

[[(AppDelegate_iPhone *)[[UIApplication sharedApplication] delegate] navigationController] dismissModalViewControllerAnimated:NO];

Но ничего не происходит.Кажется, он зависает и зависает и не допускает никакого взаимодействия с формой.Любые идеи о том, почему мой ModalViewController не будет отклонен?Я думаю, что это способ, которым я использую делегат приложения для представления viewController.Есть ли способ перейти к self.ParentViewController в классе UIButton, чтобы я мог получить ViewController представления, в котором находится кнопка (если это проблема)?

Любые идеи будут высоко оценены.

Спасибо

Ответы [ 3 ]

0 голосов
/ 03 октября 2011

Я бы вызвал метод для «родительского» viewController кнопки и сделал бы его оттуда.

0 голосов
/ 04 октября 2011

Я вспомнил, что мне приходилось делать что-то подобное один раз, и, посмотрев на этот пост:

Добраться до UIViewController из UIView?

Я смогчтобы создать несколько категорий:

//
//  UIKitCategories.h
//

#import <Foundation/Foundation.h>

@interface UIView (FindUIViewController)
- (UIViewController *) firstAvailableUIViewController;
- (id) traverseResponderChainForUIViewController;
@end

@interface UIView (FindUINavigationController)
- (UINavigationController *) firstAvailableUINavigationController;
- (id) traverseResponderChainForUINavigationController;
@end




//
//  UIKitCategories.m
//

#import "UIKitCategories.h"

@implementation UIView (FindUIViewController)
- (UIViewController *) firstAvailableUIViewController {
    // convenience function for casting and to "mask" the recursive function
    return (UIViewController *)[self traverseResponderChainForUIViewController];
}

- (id) traverseResponderChainForUIViewController {
    id nextResponder = [self nextResponder];
    if ([nextResponder isKindOfClass:[UIViewController class]]) {
        return nextResponder;
    } else if ([nextResponder isKindOfClass:[UIView class]]) {
        return [nextResponder traverseResponderChainForUIViewController];
    } else {
        return nil;
    }
}

@end

@implementation UIView (FindUINavigationController)
- (UINavigationController *) firstAvailableUINavigationController {
    // convenience function for casting and to "mask" the recursive function
    return (UINavigationController *)[self traverseResponderChainForUINavigationController];
}

- (id) traverseResponderChainForUINavigationController {
    id nextResponder = [self nextResponder];
    if ([nextResponder isKindOfClass:[UINavigationController class]]) {
        return nextResponder;
    } else {
        if ([nextResponder isKindOfClass:[UIViewController class]]) {
            //NSLog(@" this is a UIViewController ");
            return [nextResponder traverseResponderChainForUINavigationController];
        } else {
            if ([nextResponder isKindOfClass:[UIView class]]) {
                return [nextResponder traverseResponderChainForUINavigationController];
            } else {
                return nil;
            }
        }
    }
}

@end

затем вы можете назвать их так:

UINavigationController *myNavController = [self firstAvailableUINavigationController];

UIViewController *myViewController = [self firstAvailableUIViewController];

возможно, они помогут вам, я надеюсь, что так.

0 голосов
/ 03 октября 2011

В вашем DropDownPickerViewController, вместо этого:

[[(AppDelegate_iPhone *)[[UIApplication sharedApplication] delegate] navigationController] dismissModalViewControllerAnimated:NO];

Попробуйте

[self dismissModalViewControllerAnimated:NO]; 
...