뭔가가 누락되었습니다. 이 코드는 정상적으로 작동하지만 모든 컴파일러 경고를 지우고 싶습니다. 이 경우에 나는 UINavigationControllerDelegate에 대한 참조가 왜 아무 생각이 충분하고 공정 - 과거의 경험에서컴파일러에서 UIImagePickerControllerDelegate 프로토콜 준수 여부 확인
Sending 'GSBBuilderImageButton *const __strong' to parameter of incompatible type 'id<UINavigationControllerDelegate,UIImagePickerControllerDelegate>'
이 경고 메시지와 함께, 나는 이 프로토콜이 경고에 언급 된 몰랐는데.
그러나 여기 내 인터페이스가 처음이다 : 중요한 것은
#import <UIKit/UIKit.h>
#import "GSBImageButtonDelegate.h"
@interface GSBBuilderImageButton : UIButton <UIImagePickerControllerDelegate>
{
UIPopoverController *popover;
UIImage *imageData;
NSURL *mediaURL;
id <GSBBuilderImageButtonDelegate> _delegate;
}
@property (strong, nonatomic) NSURL *mediaURL;
@property (strong, nonatomic) UIImage *imageData;
@property (strong, nonatomic) id <GSBBuilderImageButtonDelegate> delegate;
- (void)removePicture;
- (void)setImageData:(UIImage *)theImageData;
@end
는 UIImagePickerControllerDelegate 채택을 포함 @interface 선언이다. 내 구현
이상 나는 터치에주의 (: forAction : forControlState을 : 나는 내가 setTarget를 사용하지 않는 한이 쓴시에 생각이 클래스는 UIView의 삶 시작했기 때문에) :
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
// really need to check to see that the touch ended while within our bounds
UIImagePickerController *imagePicker = [[UIImagePickerController alloc] init];
[imagePicker setSourceType:UIImagePickerControllerSourceTypeSavedPhotosAlbum];
[imagePicker setSourceType:UIImagePickerControllerSourceTypePhotoLibrary];
[imagePicker setDelegate:self];
을
그래서 내가 읽은 방식은 로컬 객체 인 imagePicker에 위임자가 인터페이스의 GSBBuilderImageButton 인스턴스가 UIImagePickerControllerDelegate 프로토콜을 따르고 있음을 알리는 것입니다. 그것은 완벽하게 유효하며 우리가 항상하는 것처럼 보입니다. 내 GSBBuilderImageButton에 자체 대리인이 있다는 것은 사실이지만 잘못 입력하지 않으면이 점을 감안하면 안됩니다.
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
// Initialization code
[[self imageView] setContentMode:UIViewContentModeScaleAspectFill];
UILongPressGestureRecognizer *longPress = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(removePicture)];
[self addGestureRecognizer:longPress];
}
return self;
}
: 완성도, 여기에 내가 사용하고 초기화 그래서
는
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
내가 프로그래밍 방식으로이 버튼을 짓고 있어요 선택 의정서 방식의 구현을 포함, 물론, 그 이후 더있다
(참고 : setImageData ... 내 정의에 신경 쓰지 마세요. UIButton의 setImage를 호출하는 래퍼 메소드이며 몇 가지 다른 작업이 있으며 유산은이 UIView의 유산입니다.이 앱의 버전 2.0 setImage를 오버라이드합니다 :
확실히 충분합니다! 고맙습니다! – tobinjim