我正在尝试解决如何设置UITableViewCellStyle在iOS 6中使用新方法的时间UITableView.
以前,在创建时UITableViewCell我会更改UITableViewCellStyle枚举以在调用时创建不同类型的默认单元格,initWithStyle:但是从我可以收集的内容来看,情况不再如此.
UITableView州的Apple文档:
返回值:具有关联重用标识符的UITableViewCell对象.此方法始终返回有效单元格.
讨论:出于性能原因,表视图的数据源通常应该在将单元格分配给其tableView:cellForRowAtIndexPath:方法中的行时重用UITableViewCell对象.表视图维护数据源已标记为可重用的UITableViewCell对象的队列或列表.当要求为表视图提供新单元格时,从数据源对象中调用此方法.如果现有单元格可用,则此方法会使现有单元格出列,或者根据先前注册的类或nib文件创建新单元格.
要点:在调用此方法之前,必须使用registerNib:forCellReuseIdentifier:或registerClass:forCellReuseIdentifier:方法注册类或nib文件.
如果为指定的标识符注册了类并且必须创建新的单元格,则此方法通过调用其initWithStyle:reuseIdentifier:方法来初始化该单元格.对于基于nib的单元格,此方法从提供的nib文件加载单元格对象.如果现有单元可用于重用,则此方法将调用单元的prepareForReuse方法.
这是我cellForRowAtIndexPath实现新方法后的新视图:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *cellIdentifier = @"cell_identifier";
[tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:cellIdentifier];
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier forIndexPath:indexPath];
return cell;
}
Run Code Online (Sandbox Code Playgroud)
到目前为止我的代码工作正常,但总是返回默认样式.我怎样才能改变这个,所以我可以创建细胞与其他风格,比如UITableViewCellStyleDefault,UITableViewCellStyleValue1,UITableViewCellStyleValue2和UITableViewCellStyleSubtitle?
我不想继承子类UITableViewCell,我只想改变默认类型,就像我在iOS 6之前所做的那样.看起来很奇怪Apple会提供增强的方法,但只需要很少的文档来支持它们的实现.
有没有人掌握这个,或遇到类似的问题?我很难找到任何合理的信息.
我已经为iOS开发了几年,并且认为自己在iOS和Objective C方面非常称职.我想进一步扩展我的技能并进入OS X的桌面应用程序领域.
考虑到视图控制器和窗口控制器这两个平台的范例截然不同(仅举几例),我很难找到一个不错的起点,因为我对iOS SDK的了解在浏览操作系统时引起了混乱X文档.
对我来说,iOS的主要类是UIViewController(和它的变体,UINavigationController和UISplitViewController)和UIView.前往这些品牌学习他们的子类(如把手UIButton,UITextField)更容易理解,同时也获得一些在屏幕上提供显着的成果.
目前,我的理解NSViewController并不一定是相同的对应物UIViewController.另外,考虑到OS X应用程序可以有多个窗口,UIWindowController对我来说是完全陌生的,我不明白它将如何位于应用程序的层次结构中.
任何经验丰富的OS X老手都会非常友好地建议哪些课程对我来说是最有用的起点并且可以随意播放?在这一点上对我有帮助的是找到我应该集中精力的SDK的哪个方面,以充分辨别iOS和OS X之间的差异.
编辑:
我不是要求教程列表.我更倾向于某人解释多视图控制器层次结构(iOS)的范例与OS X的单个窗口设置之间的区别和/或建议最好调查哪些类作为在屏幕上获取某些内容的起点为NSWindow和NSWindowController.
我一直在寻找适用于iOS的新OpenGL框架,恰当地命名为GLKit,并且一直在将一些现有的OpenGL 1.0代码移植到OpenGL ES 2.0中,只是为了让我的脚趾浸入水中并掌握一切.
在阅读了API以及Apple和OpenGL文档提供的其他最佳实践的全部内容之后,我已经根深蒂固了我应该使用顶点缓冲对象并使用"元素"或更确切地说是顶点索引.似乎有很多关于通过在必要时使用填充来优化内存存储的提及,但这可能是另一天的对话;)
我刚才读到了关于使用NSMutableData而不是经典malloc/free的好处,并希望在编写我的VBO时尝试采用这种方法.到目前为止,我已经设法将一个看起来像我正在走向正确轨道的片段拼凑在一起,但我不完全确定VBO应该包含多少数据.这是我到目前为止所得到的:
//import headers
#import <GLKit/GLKit.h>
#pragma mark -
#pragma mark InterleavingVertexData
//vertex buffer object struct
struct InterleavingVertexData
{
//vertices
GLKVector3 vertices;
//normals
GLKVector3 normal;
//color
GLKVector4 color;
//texture coordinates
GLKVector2 texture;
};
typedef struct InterleavingVertexData InterleavingVertexData;
#pragma mark -
#pragma mark VertexIndices
//vertex indices struct
struct VertexIndices
{
//vertex indices
GLuint a;
GLuint b;
GLuint c;
};
typedef struct VertexIndices VertexIndices;
//create and return a vertex index with specified indices
static inline VertexIndices …Run Code Online (Sandbox Code Playgroud) 嗨!
我正在尝试创建一个可重用的UIView(出于各种原因),类似于UITableViewController中使用的UITableViewCell实现.我想在UIScrollView中使用可重用的视图,所以我知道我不是想要实现一些完全无法实现的东西.
默认的实现是:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
//declare cell identifier
static NSString *cellIdentifier = @"cell_identifier";
//dequeue cell
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];
//check cell is valid
if(cell == nil)
{
//create a new cell
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:cellIdentifier];
}
//
//return cell
return cell;
}
Run Code Online (Sandbox Code Playgroud)
从这一点来说,值得注意的是,单元格是从UITableView中出列的.如果单元格无效,则创建新单元格.我的问题是,这个单元如何变为"排队"以便以后再次使用?
我目前尝试的实现如下所示:
- (TestScrollViewCell *)scrollView:(TestScrollView *)_scrollView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
//declare cell identifier
static NSString *cellIdentifier = @"cell_identifier";
//dequeue cell
TestScrollViewCell *cell = (TestScrollViewCell *)[scrollView dequeueReusableCellWithIdentifier:cellIdentifier];
//check cell is valid
if(cell …Run Code Online (Sandbox Code Playgroud) 嗨!
我一直在研究更新一些旧的测试代码,试图了解添加到GLKit的新功能.到目前为止,我已经设法建立一个GLKViewController并开始渲染一些基本的形状,但很难找到关于GLKBaseEffect的任何体面的信息.
GLKBaseEffect文档说明:
在初始化时,您的应用程序首先创建一个OpenGL ES 2.0上下文并使其成为当前.然后,它分配并初始化一个新的效果对象,配置其属性,并调用其prepareToDraw方法.绑定效果会导致着色器被编译并绑定到当前的OpenGL ES上下文.基本效果还需要应用程序提供顶点数据.要提供顶点数据,请创建一个或多个顶点数组对象.对于着色器所需的每个属性,顶点数组对象应启用该属性并指向存储在顶点缓冲区对象中的数据.
我正在努力辨别的是;
我是否需要为每个"模型"呈现GLKBaseEffect对象?或者我是否为每个"场景"使用单个GLKBaseEffect,只需在调用prepareToDraw之前动态更改属性?
我已经看过一些游戏引擎和渲染器的教程,它们只为每个模型使用一个GLKBaseEffect,但如果使用单个实例可以实现同样的效果,这似乎完全没有效率.
从阅读文档看,这似乎是最好的方法,但考虑到我看到很多人使用多个实例,我开始认为情况并非如此.
任何人都可以对此有所了解吗?对于iOS(以及我)来说,GLKit仍然相当新,所以任何信息都会非常感激.