4

私は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

in 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
4

1 に答える 1

0

最初のNSLogステートメントは起動していますか?「OKボタンが押されました」。そうでない場合は、(IBAction)okButtonPressedがInterfaceBuilderに接続されていることを確認してください。もしそうなら、しかし[delegatescoreAssigned:@"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は、たとえばUIButtonのように、UIViewの任意のサブクラスである可能性があることに注意してください。

于 2012-05-04T15:29:43.007 に答える