0

ここに画像の説明を入力してください

スクリーンショットが示すように、SliderValueViewController.xibにUIButtonがあります。このUIButtonをクリックすると、Secondview.xibにサブビュー(名前はdetailview)が自動的に追加されます。これが私のコードです。SliderValueViewController.hiで、プロトコルを宣言します。

#import <UIKit/UIKit.h>
@protocol Testmyview

-(void)displayview;

@end


@interface SliderValueViewController : UIViewController {

    IBOutlet UILabel *sliderValue;
    IBOutlet UIButton *btngo;
        id <Testmyview> delegate;
}

@property (nonatomic, retain) IBOutlet UILabel *sliderValue;
@property (nonatomic, assign)id <Testmyview> delegate;

-(void)updateSliderValueTo:(CGFloat)_value;
-(IBAction)gotodetailview;
@end

そしてSliderValueViewController.mで

           #import "SliderValueViewController.h"
           #import"secondview.h"
           @implementation SliderValueViewController
           @synthesize sliderValue;
           @synthesize delegate;

そして、これが私のボタン機能です。

    -(IBAction)gotodetailview
      {
         [self.delegate displayview];
      }

今私のsecondview.h

ここに画像の説明を入力してください

そして私のsecondview.mはこのように見えます。

   #import "secondview.h"
   #import "SliderValueViewController.h"
   #import "ELCSlider.h"
   @implementation secondview

そして、これが私が欲しい私の機能です。

  -(void)displayview
    {
      [self.view addSubview:detailview];    
   }

ELSLiderl.miでこれを行います。

 -(id)initWithCoder:(NSCoder *)aDecoder {

 if(self = [super initWithCoder:aDecoder]) {
    [self addTarget:self action:@selector(valueChanged) forControlEvents:UIControlEventValueChanged];
    sliderValueController = [[SliderValueViewController alloc] initWithNibName:@"SliderValueViewController" bundle:[NSBundle mainBundle]];
    popoverController = [[UIPopoverController alloc] initWithContentViewController:sliderValueController];
    [popoverController   setPopoverContentSize:sliderValueController.view.frame.size];
     }

    return self;    
   }

 -(void)valueChanged {

[sliderValueController updateSliderValueTo:self.value];

CGFloat sliderMin =  self.minimumValue;
CGFloat sliderMax = self.maximumValue;
CGFloat sliderMaxMinDiff = sliderMax - sliderMin;
CGFloat sliderValue = self.value;

if(sliderMin < 0.0) {

    sliderValue = self.value-sliderMin;
    sliderMax = sliderMax - sliderMin;
    sliderMin = 0.0;
    sliderMaxMinDiff = sliderMax - sliderMin;
}

CGFloat xCoord = ((sliderValue-sliderMin)/sliderMaxMinDiff)*[self frame].size.width-sliderValueController.view.frame.size.width/2.0;

CGFloat halfMax = (sliderMax+sliderMin)/2.0;

if(sliderValue > halfMax) {

    sliderValue = (sliderValue - halfMax)+(sliderMin*1.0);
    sliderValue = sliderValue/halfMax;
    sliderValue = sliderValue*11.0;

    xCoord = xCoord - sliderValue;
}

else if(sliderValue <  halfMax) {

    sliderValue = (halfMax - sliderValue)+(sliderMin*1.0);
    sliderValue = sliderValue/halfMax;
    sliderValue = sliderValue*11.0;

    xCoord = xCoord + sliderValue;
}

[popoverController presentPopoverFromRect:CGRectMake(xCoord, 0, sliderValueController.view.frame.size.width, sliderValueController.view.frame.size.height) inView:self permittedArrowDirections:UIPopoverArrowDirectionDown animated:YES];
 }

このすべてのコードを使用すると、摩耗やエラーは発生しませんが、サブビューは追加されませんでした。ブレークポイントを使用すると、UIButtonメソッド(-(IBAction)gotodetailview)が呼び出されましたが、secondviewでデリゲートメソッドメソッド(-(void)displayview)は呼び出されませんでした。誰かが私が.thanxを前もって犯した間違いを助けることができますか?

4

1 に答える 1

2

secondview.m

delegateのプロパティを設定するのを忘れたようですSliderValueViewController

""を表示またはプッシュする関数では、次のSliderValueViewControllerようなものがあります

SliderValueViewController *controller = [[SliderValueViewController alloc] init];
//You will need to add this code
//self is secondview
controller.delegate = self;

今、[self.delegate displayview];電話を受けると、これは電話をかけdisplayviewますsecondview

于 2012-06-09T13:26:03.460 に答える