【问题标题】:IOS5 iPad popup controller delegate not sending messages to parent controllerIOS5 iPad弹出控制器委托不向父控制器发送消息
【发布时间】:2012-05-04 15:20:28
【问题描述】:

我是 iOS 编程新手,无法让这个简单的概念发挥作用——我只希望弹出控制器能够调用方法并在父控制器上发送数据。谁能发现我在这里做错了什么?

在DetailViewController.h中

#import <UIKit/UIKit.h>
#import "Employee.h"
#import "CompleteViewController.h"

@class EmployeesTVC;


@interface DetailViewController : UIViewController <UISplitViewControllerDelegate, UIPopoverControllerDelegate>

@property (strong) UIPopoverController *popController;

-(IBAction)completeButtonPressed:(id)sender;
@end

在DetailViewController.m中(去掉不相关的部分)

@implementation DetailViewController {
    __weak UIPopoverController *completePopover;
}

// ...

#pragma mark - Complete / Score popover methods

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    NSLog(@"preparing for segue");
    UIStoryboardPopoverSegue *popoverSegue = (UIStoryboardPopoverSegue *)segue;
    UIPopoverController *scorePopoverController = [popoverSegue popoverController];
    [scorePopoverController setDelegate:self];
    self.popController = scorePopoverController;
}

- (IBAction)completeButtonPressed:(id)sender {
    if (completePopover) {
        [completePopover dismissPopoverAnimated:YES];
    } else {
        [self performSegueWithIdentifier:@"showScorePopover" sender:sender];    
    }
}

- (void) scoreAssigned:(NSString *)score {
    NSLog(score);
    NSLog(@"Score Assigned");
}

// ...

@end

CompleteViewController.h(弹出视图控制器)

#import <UIKit/UIKit.h>

@protocol CompleteViewDelegate <NSObject>
- (void)scoreAssigned:(NSString *)score;
@end


@interface CompleteViewController : UIViewController

@property (nonatomic, assign) id<CompleteViewDelegate> delegate;

- (IBAction)okButtonPressed:(id)sender;

@end

CompleteViewController.m

#import "CompleteViewController.h"

@implementation CompleteViewController
@synthesize delegate;


- (IBAction)okButtonPressed:(id)sender {
    NSLog(@"OK Button Pressed");
    [delegate scoreAssigned:@"100"];
}

@end

【问题讨论】:

    标签: ios ipad ios5


    【解决方案1】:

    你的第一个 NSLog 语句触发了吗? “按下确定按钮”。如果没有,请确保 (IBAction)okButtonPressed 已在 Interface Builder 中连接。如果是这样,但是在 [delegate scoreAssigned:@"100"] 上有一个断点;并用鼠标将鼠标悬停在“代表”上以查看它是否为零,只是为了查看代表是否已成功分配。如果这不能解决问题,请在事情停止工作之前让我们确切知道您要去哪里。

    正确呈现 UIPopoverController

    [completePopover setDelegate:self];
    [completePopover presentPopoverFromBarButtonItem:yourButtonItem permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];
    //or if you don't have a bar button item
    [completePopover presentPopoverFromRect:CGRectMake(0.0, 0.0, 0.0, 0.0) inView:yourTargetView permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];
    

    请记住,inView 可以是 UIView 的任何子类,例如 UIButton。

    【讨论】:

    • "OK Button Pressed" 正在触发,并且代表不为零......然后什么也没有。应用程序不会崩溃,只是不会做任何进一步的事情。
    • 在 Interface Builder 中分配的任何委托?想知道这是否会覆盖您分配的内容。
    • 哦等等。我认为它实际上是空的,我只是没有意识到。 IB中没有分配代表。如果有帮助,详细视图是拆分视图的详细视图。
    • 另外,在“scorePopoverController.delegate = self”上有一条警告,上面写着“Assigning to id”来自不兼容的类型“DetailViewController *const__strong”
    • 是否必须使用 segue 来加载弹出框?我正在用一些代码编辑上面的答案,应该让它正确呈现。
    猜你喜欢
    • 2014-11-25
    • 1970-01-01
    • 2011-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多