【发布时间】:2017-05-20 13:49:48
【问题描述】:
大家好,我正在使用 Xcode 8,我正在尝试使用委托在两个视图控制器之间传递对象,但不知何故委托方法没有被调用。我试图纠正但我无法做到。谁能建议我在这里做错了。谢谢。这是我的代码
VideoViewController.h
#import <UIKit/UIKit.h>
#import<AVFoundation/AVFoundation.h>
#import "VideoCollection.h"
//delegate methods
@class VideoViewController;
@protocol AddVideoDelegate <NSObject>
-(void)addVideoToCollectionView:(VideoViewController*)viewController didAddVideo:(VideoCollection*)object;
@end
@interface VideoViewController : UIViewController<UITextFieldDelegate,UIPickerViewDelegate,UIPickerViewDataSource>
- (instancetype)initWithVideoUrl:(NSURL *)url;
@property (strong, nonatomic) NSURL *videoUrl;
@property (strong, nonatomic) AVPlayer *avPlayer;
@property (strong, nonatomic) AVPlayerLayer *avPlayerLayer;
@property (strong, nonatomic) UIButton *cancelButton;
@property (strong, nonatomic) UITextField *captionField;
@property (nonatomic, retain) NSMutableArray *dataArray;
@property (strong, nonatomic) UIPickerView *pickerView;
@property (nonatomic, weak) id<AddVideoDelegate> delegate;
@end
VideoViewController.m
-(void)addButtonPressed:(UIButton *)button{
//
id<AddVideoDelegate> strongDelegate = self.delegate;
if ([strongDelegate respondsToSelector:@selector(addVideoToCollectionView:didAddVideo:)]) {
VideoCollection* videoCollection=[[VideoCollection alloc] init];
videoCollection.videoCaption=self.captionField.text;
videoCollection.videoURL=_videoUrl;
videoCollection.videoType=self.videoTypeLabel.text;
CGRect screenRect = [[UIScreen mainScreen] bounds];
videoCollection.captionHeightPercentage=(self.captionField.frame.origin.y*100)/screenRect.size.height;
[strongDelegate addVideoToCollectionView:self didAddVideo:(VideoCollection *)videoCollection];
}
NSLog(@"added");
}
videoCollectionViewController.h
#import <UIKit/UIKit.h>
#import "VideoViewController.h"
@interface videoCollectionViewController : UIViewController<AddVideoDelegate>
@property (weak, nonatomic) IBOutlet UIButton *btn;
@property (weak, nonatomic) IBOutlet UILabel *label;
@property (strong, nonatomic) VideoViewController* _vc;
- (IBAction)click:(id)sender;
- (IBAction)sfds:(id)sender;
@end
videoCollectionViewController.m
#import "videoCollectionViewController.h"
#import "WebSerivceInterface.h"
#import "VideoViewController.h"
@interface videoCollectionViewController ()
@end
@implementation videoCollectionViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view.
__vc=[[VideoViewController alloc] init];
__vc.delegate=self;
}
-(void)addVideoToCollectionView:(VideoViewController *)viewController didAddVideo:(VideoCollection *)object{
NSLog(@"delegate called");
self.label.text=object.videoCaption;
}
@end
【问题讨论】:
-
嗨,Riya,您能否在 VideoViewController.h 类中创建代理的属性,然后尝试在两个控制器之间传递数据。确保您的委托属性必须是弱的。
-
@MandeepSingh 我部分添加了有问题的 videoViewController.h,但它在文件中
-
你的VideoViewController是什么,是uiview的子类吗?
-
@MandeepSingh 我已经编辑了问题
-
这不是在 videoCollectionViewController 类中调用委托的方式。
标签: ios objective-c