1

ペン先とプロトコルを含むカスタム ビュー (settingview) があります。デリゲートを使用してビューコントローラーにこのビューを追加したい。デリゲートを設定すると、アプリがクラッシュし、何が間違っているのかわかりません。

ViewController 用の NIB がありません。

私のコードとViewのNIBの画像をいくつか添付しています。

-[UIView setDelegate:]: 認識されないセレクターがインスタンス 0xb265e20 に送信されました

.h

@protocol  SettingViewDelegate

@required

-(void)CornerSlider:(id)sender;
-(void)MarginSlider:(id)sender;
-(void)BorderSlider:(id)sender;
-(void)ShadowSlider:(id)sender;
-(void)BorderColor:(id)sender;
-(void)ShadowColor:(id)sender;
-(void)remove:(id)sender;
@end

@interface SettingView : UIView

@property (nonatomic, assign) id  delegate;

-(IBAction)CornerSlider1:(id)sender;
-(IBAction)MarginSlider1:(id)sender;
-(IBAction)BorderSlider1:(id)sender;
-(IBAction)ShadowSlider1:(id)sender;
-(IBAction)BorderColor1:(id)sender;
-(IBAction)ShadowColor1:(id)sender;
-(IBAction)remove1:(id)sender;

@end

.m

@implementation SettingView


- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        self = [[[NSBundle mainBundle] loadNibNamed: @"Setting"
                                          owner: self
                                        options: nil] objectAtIndex:0];
    }
    return self;
}

-(IBAction)CornerSlider1:(id)sender
{
    [self.delegate CornerSlider:sender];
}
-(IBAction)MarginSlider1:(id)sender
{
    [self.delegate MarginSlider:sender];
}
-(IBAction)BorderSlider1:(id)sender
{
    [self.delegate BorderSlider:sender];
}
-(IBAction)ShadowSlider1:(id)sender
{
    [self.delegate ShadowSlider:sender];
}
-(IBAction)BorderColor1:(id)sender{
    [self.delegate BorderColor:sender];
}
-(IBAction)ShadowColor1:(id)sender{
    [self.delegate ShadowColor:sender];
}
-(IBAction)remove1:(id)sender{
    [self.delegate remove:sender];
}


@end

ビューニブ

デリゲートを設定した後、ここでアプリがクラッシュします。

SettingView *settingView=[[SettingView alloc]init];
[settingView setDelegate:self];
[self.view addSubview:settingView];
4

6 に答える 6

0

試しましたか

@interface BlaBlaViewController : UIViewController<SettingsViewDelegate>

私はあなたのコードで見ました:

-(void)setDelegate:(id)delegate
{
   self.delegate = delegate;
}

これにより、無限ループが発生します。セッターをオーバーロードするには、合成された _ivar を使用する必要があります (または、すべて一緒に除外します)。

于 2013-09-03T08:36:56.083 に答える
0

「Setting View」を追加する「self.view」クラスにデリゲートのすべてのメソッドを実装したかどうかを確認します。また、サブビューとして「Setting View」を追加したクラスに「SettingsViewDelegate」を実装したかどうかも確認してください。

より明確にするために、これを見てください https://stackoverflow.com/a/12660523/859001

于 2013-09-03T08:34:12.973 に答える
0

間違い発見。IBでした。カスタム クラス (SettingView) をファイルの所有者のクラスに設定していました。現在、そのビューのカスタム クラスとファイルの所有者は UIView のクラスです。

ここに画像の説明を入力

そして今はうまくいっています。 .

于 2013-09-03T09:29:16.720 に答える