Ios 在UIActionSheetDelegate方法中无法显示子视图
我有以下代码(假设)当由操作表按钮触发时,它会显示一个子视图:Ios 在UIActionSheetDelegate方法中无法显示子视图,ios,objective-c,delegates,uiactionsheet,Ios,Objective C,Delegates,Uiactionsheet,我有以下代码(假设)当由操作表按钮触发时,它会显示一个子视图: - (void) actionSheet:(UIActionSheet *)actionSheet didDismissWithButtonIndex:(NSInteger)buttonIndex { if (buttonIndex ==0) { [self.view addSubview:self.customView]; // // heavy lifting of
- (void) actionSheet:(UIActionSheet *)actionSheet didDismissWithButtonIndex:(NSInteger)buttonIndex
{
if (buttonIndex ==0) {
[self.view addSubview:self.customView];
//
// heavy lifting of method here
//
// self.customView removes itself from superview before actionSheet:dismissWithButtonIndex: finishes
}
}
完成所有“繁重工作”后,子视图将自己从视图继承人中移除(在操作表委托方法完成之前)
唉!!我发现子视图从未显示在屏幕上。
事实上,如果我阻止添加的子视图自行关闭并设置断点,我会发现它确实会显示,但只有在UIActionSheet委托方法完成后才会显示
起初,我认为这是因为子视图出现在actionSheet:clickedbutonnatindex:
UIActionSheet委托方法中-导致actionSheet阻止视图的显示
看看其他可用的方法,actionSheet:diddismisswithbuttonnindex:
似乎可以解决我的问题,因为这个方法在动画结束后被调用,视图被隐藏(根据Apple文档)。还是不走运
在方法完成之前,您是否想过如何显示此子视图。您似乎正在使用相同的方法添加和删除子视图(actionSheet:didDismissButtonIndex:)。这意味着操作是在主运行循环的同一周期中完成的。请注意,视图渲染仅在操作结束时完成,这意味着“addSubview”被“removeFromSuperview”覆盖,从而导致根本不渲染视图
您可以做的是在取消操作表之前但单击按钮之后调用的委托方法中“addSubview”,然后在取消操作表之后调用的委托方法中调用“removeFromSuperview”:
-(void)actionSheet:(UIActionSheet *)actionSheet willDismissWithButtonIndex:(NSInteger)buttonIndex {
[self.view addSubview:self.subviewToAdd];
self.subviewToAdd.center=CGPointMake(160,100);
}
-(void)actionSheet:(UIActionSheet *)actionSheet didDismissWithButtonIndex:(NSInteger)buttonIndex {
[self.subviewToAdd removeFromSuperview];
}
在本例中,您将看到视图正在闪烁,因为添加/删除操作在动作表动画时间内受到限制。您可以通过更改actionSheet:didDismissWithButtonIndex:将其设置为在较长时间后删除,方法是添加一个小延迟:
-(无效)操作表:(UIActionSheet*)操作表未使用buttonIndex(集成器)buttonIndex解除{
[self.subview添加性能选择器:@selector(removeFromSuperview),对象:nil afterDelay:1.0];
//[self.subview从SuperView添加或删除];
}
您似乎在用相同的方法添加和删除子视图(操作表:didDismissButtonIndex:)。这意味着操作是在主运行循环的同一周期中完成的。请注意,视图渲染仅在操作结束时完成,这意味着“addSubview”被“removeFromSuperview”覆盖,从而导致根本不渲染视图
您可以做的是在取消操作表之前但单击按钮之后调用的委托方法中“addSubview”,然后在取消操作表之后调用的委托方法中调用“removeFromSuperview”:
-(void)actionSheet:(UIActionSheet *)actionSheet willDismissWithButtonIndex:(NSInteger)buttonIndex {
[self.view addSubview:self.subviewToAdd];
self.subviewToAdd.center=CGPointMake(160,100);
}
-(void)actionSheet:(UIActionSheet *)actionSheet didDismissWithButtonIndex:(NSInteger)buttonIndex {
[self.subviewToAdd removeFromSuperview];
}
在本例中,您将看到视图正在闪烁,因为添加/删除操作在动作表动画时间内受到限制。您可以通过更改actionSheet:didDismissWithButtonIndex:将其设置为在较长时间后删除,方法是添加一个小延迟:
-(无效)操作表:(UIActionSheet*)操作表未使用buttonIndex(集成器)buttonIndex解除{
[self.subview添加性能选择器:@selector(removeFromSuperview),对象:nil afterDelay:1.0];
//[self.subview从SuperView添加或删除];
}
谢谢!既然您解释了这一切都发生在同一个运行循环中,那么就有意义了——本质上是相互抵消的。谢谢你的意见,谢谢!既然您解释了这一切都发生在同一个运行循环中,那么就有意义了——本质上是相互抵消的。感谢您的意见。