我将标记为1和100的2 UIImageView插入UIView,
如何访问UIView并检查它上面有多少子视图或选择标记1作为视图的顶部?
无论如何,在UIView(不是UIViewController)的子视图中检测隐藏状态更改(或其他更改).想以某种方式检测这种异步.
我有疯狂的原因.
iPhone/Objective-C
在我的视图中,用户单击主视图上的按钮后会出现一个小"悬停"视图.当用户单击此子视图时,我希望子视图FlipFromRight到另一个视图(相同大小).下面的主视图应该保留.
viewHot和viewCold是子视图viewMain是主要视图.
这可能吗?
我试图从UIView中删除所有子视图.我试过以下没有效果:
for (int i = 0; i < this.Subviews.Length; i++)
{
this.Subviews[i].RemoveFromSuperview ();
}
Run Code Online (Sandbox Code Playgroud) 我在单元格的内容视图中添加了一个UIWebview
UIWebView *webview = [UIWebView alloc]init];
[cell.contentView addSubview:webview];
Run Code Online (Sandbox Code Playgroud)
现在我打算从单元格的contentview中删除"webview".
我可以这样做吗?
方法1:
[webview removeFromSuperview];
Run Code Online (Sandbox Code Playgroud)
或者我真的需要在删除之前遍历contentview的所有子视图吗?
方法2:
for (UIView *subview in [self.contentView subviews])
{
if ([subview isKindOfClass:[UIWebView class]])
{
[subview removeFromSuperview];
}
}
Run Code Online (Sandbox Code Playgroud)
我尝试了方法1,它似乎没有用,我不确定我是否遗漏了某些东西,或者方法2是唯一的方法
假设我从一个笔尖加载了一个视图控制器,并决定对场景后面的一个子视图做一些事情.在稍后的时刻,我会显示这个视图控制器的视图.
viewController = [[MyViewController alloc] initWithNibName:@"MyViewController" bundle:nil];
[viewController.someSubview doSomething];
//later on
[mainView addSubview:viewController.view];
Run Code Online (Sandbox Code Playgroud)
问题是,在视图出现之前似乎没有加载someSubview对象,因此不调用doSomething方法.到目前为止,我的解决方法是致电:
[mainView addSubview:viewController.view];
[viewController.view removeFromSuperview];
Run Code Online (Sandbox Code Playgroud)
首先初始化viewcontroller的子视图.有没有更优雅的方式(如loadSubviews方法或其他东西)为此任务?
在UIView的子类中,我有:
-(BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event
{
if(touch occurred in a subview){
return YES;
}
return NO;
}
Run Code Online (Sandbox Code Playgroud)
我可以在if语句中加入什么?我想检测子视图中是否发生了触摸,无论它是否位于UIView的框架内.
无论如何我在这里找不到答案,也没有看到重复的问题.
我的代码很简单.给定3 UIView,parent,from和to,从parent中删除并添加子视图.+添加动画,但这只是doodads.
现在,问题是当我这样做时,然后得到抵消.好像它被推倒了.
我甚至添加了To.frame = ParentView.frame; 确保它有效.它没有.
我该怎么办?
+ (void) AnimateSwitchingWithParent: (UIView *) ParentView From: (UIView *) From To: (UIView* ) To
{
/*[UIView beginAnimations:@"View Flip" context:nil];
[UIView setAnimationDuration:1.25];
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
[UIView setAnimationTransition: UIViewAnimationTransitionFlipFromRight forView:ParentView cache:YES];*/
[From removeFromSuperview];
[ParentView addSubview:To];
To.frame=ParentView.frame; //If I don't do this, the subview is still off by around 20 points
NSLog(@"To.bounds: %@", NSStringFromCGRect(To.bounds));
NSLog(@"From.bounds.: %@", NSStringFromCGRect(From.bounds));
NSLog(@"ParentView.bounds: %@", NSStringFromCGRect(ParentView.bounds));
//JA_DUMP (To.bounds);
//JA_DUMP (To.bounds);
/*[UIView commitAnimations];*/
}
Run Code Online (Sandbox Code Playgroud)
我已经找到了解决方案.结果是To的框架
To.frames:{{0,0},{320,372}}
但是,如果我删除To.frame = ParentView.frame,那么框架也是如此
{{0,20},{320,460}}
我想知道为什么?20点似乎是状态栏的距离.我们在哪里可以在InterfaceBuilder中设置该框架?
我在SimulatedMetric部分中将statusbar设置为none.
当使用自动布局时,我的理解是删除子视图(当然保留对它的引用),删除的子视图仍然知道它的自动布局约束.
但是,当稍后将其添加回超级视图时,子视图不再知道其帧大小.相反,它似乎得到零帧.
我假设autolayout会自动调整大小以满足约束条件.那不是这样吗?我认为自动布局意味着不要弄乱框架.添加子视图时是否仍需要设置初始帧rect,即使使用自动布局?
UIWebview当用户选择一个选项卡时,我有一个加载为子视图UISegmentedControl.出于某种原因,我不能让它允许pinch/zooming.我在viewDidLoad:方法中设置了以下代码,因此它应该可以工作.
self.myWebView = [[[UIWebView alloc] initWithFrame:self.view.frame] autorelease];
self.myWebView.backgroundColor = [UIColor whiteColor];
self.myWebView.scalesPageToFit = YES;
self.myWebView.autoresizingMask = (UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight);
self.myWebView.delegate = self;
[self.view addSubview: myWebView];
Run Code Online (Sandbox Code Playgroud)
我尝试UIWebView从NIB 加载并以编程方式创建它无济于事.有什么我想念的吗?什么可能导致webview忽略捏和缩放?
谢谢!
subview ×10
iphone ×5
uiview ×4
objective-c ×3
ios ×2
addsubview ×1
autolayout ×1
cocoa ×1
events ×1
flip ×1
load ×1
superview ×1
touch ×1
uitableview ×1
uiwebview ×1
xamarin.ios ×1
xcode ×1
zoom ×1