我是Objective-C的新手并尝试创建自定义单元格.在故事板(在Xcode 4.2下)我正在推动一个TableViewController.在这个控制器我正在显示一些简单的单元格,但现在我想自定义它们.(在较旧版本的Xcode中,我使用的是这样的东西:
if (cell == nil) {
NSArray * topLevelObjects = [[NSBundle mainBundle] loadNibNamed:@"MyNib" owner:nil options:nil];
for(id currentObject in topLevelObjects) {
if([currentObject isKindOfClass: [UITableViewCell class]]) {
cell = (detailViewCell *) currentObject;
break;
}
}
}
Run Code Online (Sandbox Code Playgroud)
加载我的自定义单元格,但现在这不再工作,因为我收到一个错误,找不到Nib文件"MyNib",当然..因为我正在使用故事板..但我该如何解决?如何从Storyboard加载CustomCell?
编辑:"哈哈,我是个白痴......我自己解决了这个问题.
static NSString *CellIdentifier = @"detailsViewCell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
Run Code Online (Sandbox Code Playgroud)
我认为这些行创建了一个标识为"detailsViewCell"的新标准单元格,所以我还没有将其更改为我的自定义单元格标识符,但是,是的,而不是它们加载我创建的自定义单元格.:)现在一切正常!"
我正在学习iOS,我使用iOS 5编写了一个简单的iPhone应用程序.该应用程序显示了一个填充了Speakers名称的UITableView,当我选择其中一个名称时,它应该转到UIViewController并显示有关该人的详细信息(名称,地址等),所以它真的有两个ViewControllers,一个UITableViewController和UIViewController(都是子类).
所以,在MICSpeakersTableViewController:UITableViewController我有这个:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
MICSpeakerDetailViewController *detailViewController = [[MICSpeakerDetailViewController alloc] initWithNibName:@"Detail" bundle:nil];
[detailViewController setSpeaker:[[self getSpeakers] objectAtIndex:indexPath.row]];
[self.navigationController pushViewController:detailViewController animated:YES];
}
Run Code Online (Sandbox Code Playgroud)
当我选择它并填充扬声器时会调用它(因为它不是nil和描述匹配).
然后我在同一个实现中有这个:
- (void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
NSIndexPath *indexPath = [ self.tableView indexPathForCell:sender];
if ([segue.identifier isEqualToString:@"Detail"])
[segue.destinationViewController setSpeaker:[[self getSpeakers] objectAtIndex:indexPath.row]];
}
Run Code Online (Sandbox Code Playgroud)
哪个也被调用,segue.identifier是Detail,而destinationViewController的扬声器设置正确(不是nil,描述匹配).我不太清楚为什么我必须再次设置它,因为我在didSelectRowAtIndexPath中设置它但我再次设置它似乎无害.
最后,在MICSpeakerDetailViewController中,调用initWithNibName方法,self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; 返回一个实例.
但是,segue永远不会发生,并且从不调用viewDidLoad.
它可能很小但我无法弄清楚......有什么建议吗?
编辑:这是故事板的屏幕截图,显示了segue和控制器:

我有一个名为"TaskTable"的UITableView,我在这个方法的TaskTable的每个单元格的contentview中添加了一个标签
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
Run Code Online (Sandbox Code Playgroud)
我的标签标签是50,我在表格视图的构建单元格中使用,而不是自定义单元格.
现在,当我尝试使用此代码从TaskTable中删除我的标签时:
for(UILabel *lbl in [cell subviews])
{
if(lbl.tag == 50)
{
[lbl removeFromSuperview];
}
}
Run Code Online (Sandbox Code Playgroud)
如果条件,代码不会输入此.为什么找不到标签?这是因为我使用内置单元格只找到自己的文本标签,或者还有其他一些我遗漏的问题?
我正在使用CAShapeLayer.我试图使它的路径在鼠标事件发生时改变.例如,当发生鼠标按下事件时,CGMutableRefPath会将路径附加到a ,然后将形状图层的路径设置为它.
问题:当我CAShapeLayer使用新路径设置路径时,除非我这样做,否则不会使用新路径更新显示.如何告诉系统形状图层的路径已更改并重绘自身?
注意:当我创建可变路径的副本并将其传递时,它可以正常工作,但每次执行复制都不会有效并导致计算机在有很多路径时变慢.
CGMutablePathRef paths = CGPathCreateMutable();
CAShapeLayer *shapeLayer = [CAShapeLayer layer];
- (void)mouseDown:(NSEvent *)event {
CGPathAddEllipseInRect(paths, nil, rect);
self.shapeLayer.path = paths; // Works once, but subsequent calls do nothing
self.shapeLayer.path = CGPathCreateCopy(paths); // Works, but super slow
}
Run Code Online (Sandbox Code Playgroud) 我希望or在 2 位图上执行简单的逻辑,但 Swift 认为这是错误的:
let u: UInt8 = 0b1
let i: Int = 0b10
i | u // Binary operator '|' cannot be applied to operands of type 'Int' and 'UInit8'
Run Code Online (Sandbox Code Playgroud)
有什么方法可以符合类型推断并且仍然有效吗?
我总是可以这样做i | Int(u) // 3,但我认为这并不是最佳选择。
我对iOS开发相当新,并且很难将UITextView调整为内容.我已经找到了几个计算字符串渲染大小和/或更新textview的帧大小的例子,但是我似乎无法让它们起作用.
当我在视图中添加UITextView时,它会添加一个高度约束,我认为它将其锁定到特定高度.我如何解决它,通过代码更新约束,和/或让我的UITextView垂直调整大小以显示我的内容?
我正在尝试使用Reactive Cocoa,我在组合来自多个UIControl的信号时遇到了麻烦.
我正在为UIEdgeInsets创建一个编辑器,并有四个UISteppers,用于顶部,左侧,底部和右侧插入.
我想要做的是:
RAC(self.insets) = [RACSignal combineLatest:@[
[topStepper rac_signalForControlEvents:UIControlEventValueChanged],
[leftStepper rac_signalForControlEvents:UIControlEventValueChanged],
[bottomStepper rac_signalForControlEvents:UIControlEventValueChanged],
[rightStepper rac_signalForControlEvents:UIControlEventValueChanged]
] reduce:^(UIStepper *top, UIStepper *left, UIStepper *bottom, UIStepper *right) {
return [NSValue valueWithUIEdgeInsets:UIEdgeInsetsMake(top.value, left.value, bottom.value, right.value)];
}];
Run Code Online (Sandbox Code Playgroud)
但是,这绝不会导致信号被处理.
如果我只包含一个信号,如下所示:
RAC(self.insets) = [RACSignal combineLatest:@[
[topStepper rac_signalForControlEvents:UIControlEventValueChanged]]
reduce:^(UIStepper *top) {
return [NSValue valueWithUIEdgeInsets:UIEdgeInsetsMake(top.value, 0.0,0.0,0.0)];
}];
Run Code Online (Sandbox Code Playgroud)
它按预期工作(观察任何其他步进器单独工作正常)但对于多个控件,我什么也得不到.我可以通过观察每个控件作为单独的信号来解决,但这似乎忽略了combineLatest方法的要点.我做错了什么,或者我应该在RAC项目上提出问题?
我已经实现awakeFromInsert了在我的核心数据对象中设置一些默认值和关系.但是,该方法被调用两次,这意味着我添加的to-many值被多次添加.
我正在使用父和子托管对象上下文.
是什么赋予了?
我正在开发一个项目,我正在实施OAuthSwift库,以连接到使用OAuth1和OAuth2的几个不同的社交网站.
我将应用程序设置为加载Web视图,将我带到我的社交网站,但我无法让应用程序重定向回来.我加载凭据后,它会要求我授予对应用程序进行授权的权限,但是一旦我这样做,就会加载我的社交网站主页.
我可以导航回应用程序,但它没有注册它已获得访问我的帐户的权限.
这是我第一次使用OAuth,发现回调网址令人困惑.
我将非常感谢帮助解释如何让Web视图重定向回我的应用程序以及如何设置应用程序的URL.
class ViewController:UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
@IBAction func postToTumblr(sender: AnyObject) {
let oauthSwift = OAuth1Swift(
consumerKey: "consumerKey",
consumerSecret: "secretKey",
requestTokenUrl: "https://www.tumblr.com/oauth/request_token",
authorizeUrl: "https://www.tumblr.com/oauth/authorize",
accessTokenUrl: "https://www.tumblr.com/oauth/access_token"
)
oauthSwift.authorizeWithCallbackURL(NSURL(string: "com.myCompany.sampleApp")!,
success: { credential, response in
// post to Tumblr
print("OAuth successfully authorized")
}, failure: {(error:NSError!) -> …Run Code Online (Sandbox Code Playgroud) 我正在尝试检索以下值id:
{"id":1,"name":"XYZ"}
Run Code Online (Sandbox Code Playgroud)
我用的时候:
NSString *jsonData = [[NSString alloc] initWithContentsOfURL:[NSURL URLWithString:url]];
NSArray * myPeople = [jsonData JSONValue];
NSString *name = [[NSString alloc] init];
NSDictionary *person = [myPeople objectAtIndex:[indexPath row]];
name = [NSString stringWithString:[person valueForKey:@"id"]];
name = [name stringByAppendingString:@". "];
name = [name stringByAppendingString:[person valueForKey:@"name"]];
name = [name stringByAppendingString:[person valueForKey:@"id"]];
cell.textLabel.text = name;
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
*** Terminating app due to uncaught exception 'NSInvalidArgumentException'
reason: '-[NSCFNumber length]: unrecognized selector sent to instance 0x4e7f8b0
Run Code Online (Sandbox Code Playgroud)
我怎样才能解决这个问题?
ios ×6
objective-c ×3
cocoa ×2
iphone ×2
autolayout ×1
binary ×1
calayer ×1
cashapelayer ×1
cells ×1
cocoa-touch ×1
core-data ×1
ios5 ×1
json ×1
oauth-1.0a ×1
swift ×1
tumblr ×1
uistoryboard ×1
uitableview ×1
uitextview ×1
xcode ×1