1

IPhone ナビゲーション アプリケーションにカスタム UIButton クラスがあります。ユーザーがボタンをクリックすると、ユーザーが選択できるレコードのテーブルビュー リストを表示するモーダル ビューが表示されます。

ボタンをクリックすると、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 に配置できるため、アプリ デリゲートから navigationController を取得します。ユーザーがレコードを選択すると、私の DropDownPickerViewController コードよりも次のようになります。

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

しかし、何も起こりません。フリーズしてハングしているようで、フォームとのやり取りができません。私の ModalViewController が却下されない理由についてのアイデアはありますか? アプリデリゲートを使用してviewControllerを提示する方法だと思います。UIButton クラスに self.ParentViewController を移動する方法はありますか? (これが問題の場合) ボタンがあるビューの ViewController を取得できますか?

どんなアイデアでも大歓迎です。

ありがとう

4

3 に答える 3

0

DropDownPickerViewControllerで、これの代わりに:

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

試す

[self dismissModalViewControllerAnimated:NO]; 
于 2011-10-03T06:03:06.603 に答える
0

ボタンの「親」viewController でメソッドを呼び出し、そこから実行します。

于 2011-10-03T15:19:12.083 に答える
0

私は一度似たようなことをしなければならなかったことを思い出し、この投稿を見て:

UIView から UIViewController にアクセスしますか?

いくつかのカテゴリを作成できました。

//
//  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];

多分彼らはあなたを助けるでしょう、私はそう願っています。

于 2011-10-04T12:31:58.930 に答える