在试图找出为什么viewWillAppear没有在我的应用程序中被调用时,我遇到了一个可能是我对UIViewController子类的预期用途的严重误解.
根据以下帖子viewWillAppear在使用addSubView时不运行!以及此博客文章的链接:http://blog.carbonfive.com/2011/03/09/abusing-uiviewcontrollers/ UIViewController子类化应该只在非常具体的情况下发生.最值得注意的是,当直接添加到UIWindow或其他Apple创建的自定义控制器(如UINavigationControllers)时.
我肯定会将UIViewController子类的视图添加到其他UIViewController子类的视图中.
事实上,我认为这或多或少是苹果公司实施MVC的整体想法......一个整体的风险投资公司,其他风险投资公司都在下面,所有人都乐于获得他们的代表方法.
如果有,而不是通过控制了很多意见(其定义需要控制)来了,在一个应用程序去,很多screenfulls的,在该职位描述的模型中,每个screenfull应该有一个主VC子类,所有的子视图自定义控制器(碰巧控制视图)是简单NSObject的子类.
在这种情况下,UIViewControllers应该只是直接到Window或UINavigationController,UITabBarController等?
您是否可以保证在这种情况下调用UIVC Delegate方法?当viewcontroller的视图是另一个VC的子视图时,这与手动调用委托方法有何不同?
老实说,这似乎是浪费时间.viewDidLoad中,viewDidLoad中,viewDidUnload,viewWillAppear中的自定义实现,viewWillDisappear何况事情就这么简单公司,比如,"意见"的属性...
所以基本上,要么我完全错了,要么就是在疯狂追逐.如果不能指望UIViewController子类调用viewWillAppear,为什么不手动调用该方法,并完成它?
为什么要复制UIViewController的所有感知功能?
基本上,这是我的视图层次结构(如果这很难读,我会道歉......我是新来的,所以发布的建议很乐意接受)
--AppControls.xib
-------(UIView)ControlsView
-----------------(UIView)TopBar
------------- ---- -------------- btn1,btn2,btn3
----------------- UIView)BottomBar
------- ---------- -------------- slider1 btn1,btn2
--PageContent.xib
----------------- (UIView)ContentView
----------------- -------------- btn1,btn2,btn3
---------- ------- --------------(UIImageView)FullPageImage
我的情况是,我想隐藏和显示控件,当点击PageContent上的任何地方而不是按钮并且控件显示时,就像iPhone视频播放器一样.但是,当显示控件时,我仍然希望能够单击PageContent上的按钮.
除了最后一点,我完成了所有这些工作.当控件显示控件的背景时,接收触摸事件而不是下面的视图.在ControlsView上关闭用户交互会在其所有子节点上关闭它.
我已经尝试在我的ControlsView子类上重写HitTest,如下所示,我在类似的帖子中找到了:
- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event{
UIView *hitView = nil;
NSArray *subviews = [self subviews];
int subviewCount = [subviews count];
for (int subviewIndex = 0; !hitView && subviewIndex < subviewCount; subviewIndex++){
hitView = [[subviews objectAtIndex:subviewIndex] hitTest:point withEvent:event];
}
return hitView;
}
Run Code Online (Sandbox Code Playgroud)
但是,此时我的滑块不起作用,大多数其他按钮也不起作用,事实上,事情开始变得怪异.
所以我的问题很简单:如何让视图的所有子视图都有触摸事件,而超级视图的背景是不可点击的,下面视图上的按钮可以接收触摸事件.
谢谢!
我是Objective-C(和stackoverflow)的新手,我有点关于属性的最佳实践.
我的理解是,当你完全使用属性时,可以通过释放它们来避免错误,然后立即设置为nil,以便后续消息也返回nil而不是异常.
[myProperty release],myProperty = nil;
但是,当涉及到"复制"和"保留"属性的dealloc时,是否需要同时执行这两个操作?或做一个简单的
[myProperty发布]剪了吗?另外,我是否正确,我不需要在dealloc中释放'assign'属性?
谢谢!
我有一系列目标,每个目标都会查看我当前存储在常量文件中的全局变量,以获取该应用程序资源所在目录的名称.但是,这意味着每次更改目标时都必须更改此值,这是一个非常糟糕的过程.
在每个目标中更改该值的最佳方法是什么?或者我应该在目标plist中的某处指定此值?如果是这样,我如何检索该值?
谢谢!
我试图在UIWebView中播放YouTube视频而不是离开我的应用程序.
Google认为很容易让人感到轻松 - http://apiblog.youtube.com/2009/02/youtube-apis-iphone-cool-mobile-apps.html
所以我让GData框架和标头工作得很好,我在查询,加载用户的视频源等方面没有问题.
但我似乎无法加载特定视频的Feed.我知道我想要提前输入的视频的ID.如何加载特定视频的Feed?
然后我将按照谷歌的指示:
Grab the video url from the media tag in the API response with the application/x-shockwave-flash type.
Run Code Online (Sandbox Code Playgroud)
然后像这样嵌入它:
// webView is a UIWebView, either initialized programmatically or loaded as part of a xib.
NSString *htmlString = @"<html><head>
<meta name = \"viewport\" content = \"initial-scale = 1.0, user-scalable = no, width = 212\"/></head>
<body style=\"background:#F00;margin-top:0px;margin-left:0px\">
<div><object width=\"212\" height=\"172\">
<param name=\"movie\" value=\"http://www.youtube.com/v/oHg5SJYRHA0&f=gdata_videos&c=ytapi-my-clientID&d=nGF83uyVrg8eD4rfEkk22mDOl3qUImVMV6ramM\"></param>
<param name=\"wmode\" value=\"transparent\"></param>
<embed src=\"http://www.youtube.com/v/oHg5SJYRHA0&f=gdata_videos&c=ytapi-my-clientID&d=nGF83uyVrg8eD4rfEkk22mDOl3qUImVMV6ramM\"
type=\"application/x-shockwave-flash\" wmode=\"transparent\" width=\"212\" height=\"172\"></embed>
</object></div></body></html>";
[webView loadHTMLString:htmlString …
Run Code Online (Sandbox Code Playgroud) 我设法让自己对内存管理的一些元素感到困惑.我是Objective-c和内存管理语言的新手.
我已经阅读了内存管理指南,但我仍然对一些事情感到困惑.1)是否需要清理任何对象未保留的ivars和方法变量.例如
-(void) someMethod{
int count = 100;
for (int i=0; i <count; i++) {
NSLog(@"Count = %d", i);
}
}
Run Code Online (Sandbox Code Playgroud)
方法完成后"count"var会发生什么?如果一个方法分配了很多临时变量,那么只要它们没有发布,就会从内存中删除那些临时变量吗?或者我需要以某种方式将它们设置为零?
2)如果我有一个静态变量,例如NSString,那么在取消分配类时,我是否必须做任何事情才能从内存中删除?
3)我注意到NSStrings似乎有一个2147483647的retainCount,维基百科告诉我这是32位有符号整数的最大值.
http://en.wikipedia.org/wiki/2147483647
myString retainCount = 2147483647
-(void) someMethod{
NSString *myString = @"testString";
NSLog(@"myString retainCount = %d", [myString retainCount]);
// logs: myString retainCount = 2147483647
}
Run Code Online (Sandbox Code Playgroud)
在方法结束时会发生什么?这个记忆是否会被清空?任何东西都没有引用该字符串.我的理解是NSString的@""方便方法返回一个自动释放的对象,但是最后还是使用retainCount为2147483647自动释放的东西呢?在这种情况下,保留或释放任何NSString的意义何在?
我很清楚retainCount应该被忽略,但它只是让我不知道这里发生了什么.
4)这有关系吗?我知道与NSString相关的内存并不多,但我想成为一名优秀的内存管理公民,而且我对最佳实践比其他任何事情都更感兴趣.