我在IB中设计了自定义Cell,将其子类化并将我的插座连接到我的自定义类.我在单元格内容中有三个子视图:UIView(cdView)和两个标签(titleLabel和emailLabel).根据每行可用的数据,有时我想在我的单元格中显示UIView和两个标签,有时只有两个标签.我想要做的是设置约束,如果我将UIView属性设置为隐藏或我将从superview中删除它,两个标签将移动到左侧.我尝试将UIView前导约束设置为10px的Superview(单元格内容)和UILabels将10 px的约束引导到下一个视图(UIView).稍后在我的代码中
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(IndexPath *)indexPath {
...
Record *record = [self.records objectAtIndex:indexPath.row];
if ([record.imageURL is equalToString:@""]) {
cell.cdView.hidden = YES;
}
Run Code Online (Sandbox Code Playgroud)
我隐藏了我的cell.cdView,我希望标签向左移动,但是它们在Cell中保持相同的位置.我试图从superview中删除cell.cdView,但它也没有用.我附上图片来澄清我的意思.

我知道如何以编程方式执行此操作,而我不是在寻找解决方案.我想要的是在IB中设置约束,并且如果删除或隐藏其他视图,我希望我的子视图将动态移动.是否可以在具有自动布局的IB中执行此操作?
.....
Run Code Online (Sandbox Code Playgroud) 我UITableView有一个部分和几行简单.当用户单击单元附件按钮(与之连接时detailsSegue.我想知道它是什么单元格行.所以我可以从我的数组中选择正确的对象并将其分配给下一个视图中的变量.
我已经使用委托方法tableview:accessoryButtonTappedForRowWithIndexPath:并将indexPath值分配给我的私有属性myRow.比在prepareForSegue:sender:方法中我使用我的self.myRow.row值从数组中选择正确的对象.
我的问题是这两种方法似乎执行顺序错误.从NSLog我可以看到该prepareForSegue:sender:方法首先执行,我的委托方法正在改变self.myRow它之后的值.
因此,prepareForSegue:sender:方法总是将错误的对象传递给下一个视图(之前被点击的视图).
对不起,我的英国人.提前感谢您的帮助.
-(void)tableView:(UITableView *)tableView accessoryButtonTappedForRowWithIndexPath:(NSIndexPath *)indexPath {
self.myRow = indexPath;
NSLog(@"tapped button at row: %i",self.myRow.row);
}
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
if([segue.identifier isEqualToString:@"addSegue"]) {
AddViewController *avc = segue.destinationViewController;
avc.delegate = self;
}
else if ([segue.identifier isEqualToString:@"detailsSegue"]) {
NSLog(@"Segue row: %i",self.myRow.row);
Annotation *annotation = [self.viewsList objectAtIndex:self.myRow.row];
NSLog(@"Segue annotation object: %@",annotation.title);
DetailsViewController *dvc = segue.destinationViewController;
dvc.wikiKey = annotation.title;
}
}
Run Code Online (Sandbox Code Playgroud) 我已经动态创建了UITextFields不同的宽度和字体大小.我知道如何限制文本的长度UITextField,但我只能用固定的字符数来做.我需要的是动态限制字符数以适合某些UITextFields.我想每次键入新字符时,我应该使用CGSize并获得特定字体大小的文本长度,而不是将其与UITextField宽度进行比较,如果超出UITextField宽度,则限制字符数.不幸的是我不知道如何开始它.有谁知道任何可以帮助我的代码片段?
我将照片相册中的图像存储在我的应用文档目录中作为NSData,而不是在UITableView中显示它们.我的表现有问题.将图像保存到app目录需要花费几秒钟的时间,并且在将它们加载到TableView时遇到同样的问题.这是我存储图像的代码:
//Convert UIImage to NSData
NSData *imageData = [NSData dataWithData:UIImagePNGRepresentation(image)];
//Save image to app documents directory
NSError *error;
[imageData writeToFile:fullImagePath options:NSDataWritingAtomic error:&error];
Run Code Online (Sandbox Code Playgroud)
这就是我将它们加载到UITableView中的方法:
NSData *imageData = [NSData dataWithContentsOfFile:path];
UIImage *myImage = [UIImage imageWithData:imageData];
cell.imageView.image = myImage;
Run Code Online (Sandbox Code Playgroud)
什么可能导致这些性能问题?是否有任何其他方式来存储和检索应用程序文档目录中的图像?
我对编程很陌生,我找不到解决我的问题的有效方法。有人能指出我正确的方向吗?
我有一个严重依赖服务器数据的应用程序。服务器上的数据对于每个用户都是唯一的,并且可能每分钟更改一次,也可能每几小时更改一次。目前,当应用程序变为活动状态时,我正在更新本地数据,但我还需要一种通知应用程序以在应用程序保持活动状态且服务器上的数据发生更改时触发更新的方法。我想了几个解决方案:
1) NSTimer 设置为一分钟并触发 url 请求以检查服务器上是否有新数据。比较 lastModified 值后的服务器将返回新数据(如果可用)。
2)APNS - 每次数据更改时从服务器发送通知,然后在收到通知时使用服务器数据库更新本地数据。
3) 使用 NSStream/CFStream 的 TCP 套接字?
ios ×5
objective-c ×3
xcode ×2
autolayout ×1
cocoa-touch ×1
ios6 ×1
iphone ×1
nsdata ×1
segue ×1
tcp ×1
uiimage ×1
uitableview ×1
uitextfield ×1
web-services ×1