在Xcode中链接交换机的问题?

时间:2016-07-16 15:03:26

标签: ios xcode uiviewcontroller

我无法连接交换机。我理解如何将交换机作为插座连接并让它有动作更改值的布尔状态,但我需要交换机在不同的视图控制器中执行操作。

在这种情况下:我有一个主表视图控制器,称为视图控制器A.我有第二个视图控制器,我们称之为视图控制器B,它控制菜单侧栏(在常规视图控制器上,不是条形图视图)由条形项触发。我希望能够打开菜单,点击侧栏中的开关,并在视图控制器A控制的主表视图中进行更改。

有什么方法可以实现这个目标吗?我似乎无法从B中访问或更改View Controller A中的IBOutlets。有没有办法可以让B中的操作与交换机链接,更改值的布尔状态,并在控制器中等待操作一个会响应布尔变化的?我不知道如何解决这个问题。感谢帮助!

1 个答案:

答案 0 :(得分:1)

您应该使用delegation pattern。您将在控制器A中等待一个操作,但不是响应B中更改的值,而是在适当时由B触发操作

ViewControllerB.h

  using(ServiceHost myServ = new ServiceHost(typeof(HelloWorldService), baseAdress))
{

                ServiceMetadataBehavior smb = new ServiceMetadataBehavior();
                smb.HttpGetEnabled = true;
                smb.MetadataExporter.PolicyVersion = PolicyVersion.Policy15;
                myServ.Description.Behaviors.Add(smb);
                myServ.Open();
                MessageBox.Show("Services is :" + myServ.State + "\n" + baseAdress);
    }

ViewControllerB.m

// Create delegate protocol and property
@protocol ViewControllerBDelegate <NSObject>
    - (void)switchPressed:(BOOL)switchStatus;
@end

@interface ViewControllerB : NSObject
    @property (nonatomic,weak) id<ViewControllerBDelegate> delegate;
@end

ViewControllerA.h

// When switch is tapped, call delegate method if it is implemented by delegate object
- (IBAction)flip: (id) sender {
    UISwitch *onoff = (UISwitch *) sender;
    if ([self.delegate respondsToSelector:@selector(switchPressed:)]) {
        [self.delegate switchPressed:onoff.on];
    }
}

ViewControllerA.m

// Conform to ViewControllerB protocol
#import ViewControllerB.h

@interface ViewControllerA : NSObject,ViewControllerBDelegate