我一直关注iTunes U上的Stanford iOS开发视频, 但是我遇到了问题!
我正在构建一个计算器,其中一个任务是将所做的操作等发送到一个标签,该标签基本上记录所有按下的数字和操作。
在我的程序中,这应该在每次单击按钮时发生(我已经完成)。
但是由于某种原因我无法将数据发送到另一个视图控制器中的标签。
这是我用来测试它是否可以在同一视图中工作,而且确实如此。
self.memoryDisplay.text = [self.memoryDisplay.text stringWithAppendingString:digit];
所以我认为导入第二个视图控制器,在第二个视图中声明属性标签,在主视图中合成并使用它发送。
self.secondview.memoryDisplay.text = [self.memoryDisplay.text stringWithAppendingString:digit];
然而,这不起作用,任何人都知道一种简单的方法吗?
答案 0 :(得分:0)
不确定我完全理解。但是,为什么要尝试直接从不是所有者的视图控制器更新视图?那令人费解。根据您的需求,还有其他方法可以跨视图共享数据 - 最简单的方法是为全局数据定义单例。
答案 1 :(得分:0)
当我们需要向其他视图/视图控制器发送更新时,我们通过NSNitificationCenter使用通知。
在具有另一个视图需要的信息的视图中,我们执行以下操作:
// Setup Dictionary to contain values we want to pass.
NSMutableDictionary *theUserInfo = [[[NSMutableDictionary alloc] initWithCapacity:1] autorelease];
// Add our Objects to the Dictionary with a Key to get them out
[theUserInfo setObject:self forKey:@"ElementWithGesture"];
NSValue * pointAsObject = [NSValue valueWithCGPoint:translation];
[theUserInfo setValue:pointAsObject forKey:@"PanTranslation"];
[theUserInfo setObject:gestureRecognizer forKey:@"TheGestureRecognizer"];
// Post the Group Pan Notification.
[[NSNotificationCenter defaultCenter] postNotificationName:kNCSEGroupPanGesture
object:nil
userInfo:theUserInfo];
然后在需要信息的视图中我们添加代码告诉Notification Center我们对特定通知感兴趣:
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(groupHandlePanGesture:) // routine that will handle notification
name:kNCSEGroupPanGesture
object:nil];
然后您需要实际处理已发布通知的方法:
-(void) groupHandlePanGesture:(NSNotification*)notification{
// unpack our objects from the dictionary
IoUIScreenElement *element = (IoUIScreenElement *) [[notification userInfo] objectForKey:@"ElementWithGesture"];
if ([self canPan] && ![self elementLocked]) {
// unpack our pointVlue
NSValue *pointValue = [[notification userInfo] valueForKey:@"PanTranslation"];
CGPoint translation = [pointValue CGPointValue];
if (IOFNOTEQUAL(self, element) & [self isSelected]){
CGFloat xPosition = self.frame.origin.x + translation.x;
CGFloat yPosition = self.frame.origin.y + translation.y;
[self setOrigin:CGPointMake(xPosition, yPosition)];
}
}
}
然后,在完成收听通知时,您想要删除您的观察者。根据您的观点,这通常在delloc中完成。
[[NSNotificationCenter defaultCenter] removeObserver:self
name:kNCSEGroupPanGesture
object:nil];