Iphone 如何使用自己的委托方法添加子视图?

Iphone 如何使用自己的委托方法添加子视图?,iphone,ios,ipad,delegates,addsubview,Iphone,Ios,Ipad,Delegates,Addsubview,正如我的屏幕截图所示,我在SliderValueViewController.xib上有UIButton。我希望当我单击此UIButton时,它会自动在Secondview.xib中添加子视图(名称为detailview)。这是我的代码。在SliderValueViewController.h中,我声明了我的协议 #import <UIKit/UIKit.h> @protocol Testmyview -(void)displayview; @end @interface S

正如我的屏幕截图所示,我在SliderValueViewController.xib上有UIButton。我希望当我单击此UIButton时,它会自动在Secondview.xib中添加子视图(名称为detailview)。这是我的代码。在SliderValueViewController.h中,我声明了我的协议

#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
这是我的按钮功能

    -(IBAction)gotodetailview
      {
         [self.delegate displayview];
      }
现在是我的第二个观点

我的第二个观点是我看起来就像这样

   #import "secondview.h"
   #import "SliderValueViewController.h"
   #import "ELCSlider.h"
   @implementation secondview
这是我想要的函数

  -(void)displayview
    {
      [self.view addSubview:detailview];    
   }
在ELSLiderl.m我做这个

 -(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];
 }
-(id)initWithCoder:(NSCoder*)一个编码器{
if(self=[super initWithCoder:aDecoder]){
[自添加目标:自操作:@selector(valueChanged)for ControlEvents:UIControlEventValueChanged];
sliderValueController=[[SliderValueViewController alloc]initWithNibName:@“SliderValueViewController”捆绑:[NSBundle mainBundle]];
popoverController=[[UIPopoverController alloc]initWithContentViewController:sliderValueController];
[popoverController设置PopOverContentSize:sliderValueController.view.frame.size];
}
回归自我;
}
-(无效)价值变更{
[sliderValueController更新SliderValueTo:self.value];
CGFloat sliderMin=自身最小值;
CGFloat sliderMax=自身最大值;
CGFloat sliderMaxMinDiff=sliderMax-sliderMin;
CGFloat sliderValue=self.value;
if(sliderMin<0.0){
sliderValue=self.value-sliderMin;
sliderMax=sliderMax-sliderMin;
sliderMin=0.0;
SliderMaxIndiff=sliderMax-sliderMin;
}
CGFloat xCoord=((sliderValue sliderMin)/SliderMaxIndiff)*[self frame].size.width sliderValue Controller.view.frame.size.width/2.0;
CGFloat-halfMax=(sliderMax+sliderMin)/2.0;
如果(滑动值>半最大值){
sliderValue=(sliderValue-halfMax)+(sliderMin*1.0);
sliderValue=sliderValue/halfMax;
sliderValue=sliderValue*11.0;
xCoord=xCoord-滑动值;
}
else if(滑动值<半最大值){
sliderValue=(半最大值-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)查看:自许可行方向:UIPopOverErrorDirectionDown动画:是];
}

使用所有这些代码,它不会给我任何警告或错误,但它没有添加子视图。当我使用断点时,我的UIButton方法((IBAction)gotodetailview)在secondview中被调用,但它没有在secondview中被调用委托方法((void)displayview)。有谁能帮助我提前.thanx犯了什么错误。

secondview.m

您似乎忘记设置
SliderValueViewController

在显示或按下“
SliderValueViewController
”的函数中 你会有这样的东西

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

现在当
[self.delegate displayview]
get calls,这将调用gotodetailview中的
secondview

中的
displayview
,记录self.delegate的值,并检查其是否为nil@OmarAbdelhafith但是我们如何检查NSlog中self.delegate的值。如果(self.delegate==nil)NSlog(@“delegate为nil,error!!”)@是的,但这并不意味着他所做的是错的!推送sliderviewcontroller时是否设置委托,即sliderviewcontroller.delegate=self@Omer谢谢你的帮助。但是我在secondview中没有显示或推送“SliderValueViewController”的功能,因为我在“ELCSlider”中称之为“SliderValueViewController”当你看屏幕截图时,请检查一下,因为这个问题在过去4个小时里一直困扰着我。。
SliderValueViewController *controller = [[SliderValueViewController alloc] init];
//You will need to add this code
//self is secondview
controller.delegate = self;