我无法连接交换机。我理解如何将交换机作为插座连接并让它有动作更改值的布尔状态,但我需要交换机在不同的视图控制器中执行操作。
在这种情况下:我有一个主表视图控制器,称为视图控制器A.我有第二个视图控制器,我们称之为视图控制器B,它控制菜单侧栏(在常规视图控制器上,不是条形图视图)由条形项触发。我希望能够打开菜单,点击侧栏中的开关,并在视图控制器A控制的主表视图中进行更改。
有什么方法可以实现这个目标吗?我似乎无法从B中访问或更改View Controller A中的IBOutlets。有没有办法可以让B中的操作与交换机链接,更改值的布尔状态,并在控制器中等待操作一个会响应布尔变化的?我不知道如何解决这个问题。感谢帮助!
答案 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