小编eds*_*sko的帖子

在搜索过程中,UITableViewCell详细信息显示按钮按钮太远了

我有 UITableViewController一个UISearchBar作为tableHeaderView它的tableView.我也UISearchDisplayController初始化了它UISearchBar作为它searchBarUITableViewController它的contentsController.到目前为止一切都很好,一切都近乎有效

问题是UITableView具有accessoryType设置的单元格UITableViewCellAccessoryDetailDisclosureButton.这是发生的事情:

  1. 首先,一切看起来应该如此:
    在此输入图像描述
  2. 用户点击内部UISearchBar.
  3. UISearchDisplayController创建主表顶部的黑色覆盖,并使得指数(如,sectionIndexTitlesForTableView)主表中消失的.
  4. 假设用户此时隐藏键盘(通过按下标准键盘上的iPad"隐藏键盘"按钮)
  5. 由于用户尚未输入任何内容UISearchBar,我们仍然可以看到主表,尽管在黑暗叠加层下面添加了UISearchDisplayController.
  6. 隐藏键盘会暴露更多主表,导致主表加载更多单元格.
  7. 现在问题是:由于这些单元格在主表的索引被隐藏时被加载,因此公开按钮显示得太偏右(至少与其他单元格相比).
    在此输入图像描述
  8. 此外,当用户现在取消搜索时,可能不会重新加载那些单元格,导致公开按钮显示在索引下面(现在再次可见).
    在此输入图像描述

我对如何解决这个问题感到茫然; 我能想到的唯一选择是找到与披露按钮相对应的UIView并手动移动它,但这看起来非常难看,只是因为即使发现UIView 需要一个讨厌的黑客.如何以更好的方式解决这个问题的任何建议将不胜感激!

最小的可运行示例

以下是一个最小的例子.只需启动一个新的XCode项目,仅启用ARC,iPad,并使用以下内容替换AppDelegate的内容.请注意,为了最小的例子,我强制主表重新加载其单元格searchDisplayController:willShowSearchResultsTableView,否则主表将缓存其单元格并且问题将不会显示(在我的实际应用程序中,主表格因其他原因重新加载其单元格,我不完全确定为什么 - 但当然主表可以随时重新加载单元格.)

要查看发生的问题,请运行代码,在搜索框中键入内容(您将看到"搜索结果0 .. 5"),然后取消搜索.现在,主表的公开按钮显示在索引的下方,而不是旁边.

以下是代码:

@interface AppDelegate ()

@property (nonatomic, strong) UITableViewController* mainTableController;
@property (nonatomic, strong) UISearchDisplayController* searchDisplay;

@end

@implementation AppDelegate

- (BOOL)application:(UIApplication *)application …
Run Code Online (Sandbox Code Playgroud)

uitableview uisearchbar ipad ios

10
推荐指数
1
解决办法
2797
查看次数

未设置反向关系(在KVO处理程序中)

我在Core Data中有一个非常奇怪的反向关系问题,我已经设法将我的问题简化为一个最小的例子,从基于支持Core Data的窗口模板的xcode中的新项目开始(即,那里很少).

假设我们有一个包含三个实体的核心数据模型:Department,Employee和DepartmentSummary(某种实体代表部门的一些统计信息).为简单起见,我们只有一对一的关系:

DepartmentSummary   Department        Employee
---------------------------------------------------------
                    employee  <---->  department
department  <---->  summary
Run Code Online (Sandbox Code Playgroud)

这就是模型中的全部内容.在application:didFinishLaunchingWithOptions:我们创建一个员工和一个部门并设置KVO:

NSManagedObject* employee = 
 [NSEntityDescription 
   insertNewObjectForEntityForName:@"Employee"
   inManagedObjectContext:[self managedObjectContext]];
[employee addObserver:self forKeyPath:@"department" options:0 context:nil];

NSManagedObject* department = 
  [NSEntityDescription 
    insertNewObjectForEntityForName:@"Department"
    inManagedObjectContext:[self managedObjectContext]];
[department setValue:employee forKey:@"employee"];
Run Code Online (Sandbox Code Playgroud)

KVO处理程序的目的是在设置员工部门后立即为部门创建摘要:

- (void) observeValueForKeyPath:(NSString *)keyPath 
                       ofObject:(id)object 
                         change:(NSDictionary *)change 
                        context:(void *)context 
{
     [self createSummary:object];
}
Run Code Online (Sandbox Code Playgroud)

createSummary很简单:它创建一个新的摘要对象并将其与部门关联,然后检查是否还设置了从部门到摘要对象的反向关系:

- (void) createSummary:(NSManagedObject*)employee 
{
    NSManagedObject* department = [employee valueForKey:@"department"];
    NSManagedObject* summary = 
     [NSEntityDescription 
       insertNewObjectForEntityForName:@"DepartmentSummary"
       inManagedObjectContext:[self managedObjectContext]];

    [summary setValue:department forKey:@"department"];

    NSAssert([department valueForKey:@"summary"] == summary, …
Run Code Online (Sandbox Code Playgroud)

iphone core-data objective-c

9
推荐指数
1
解决办法
625
查看次数

不允许在prepareForDeletion中执行获取请求?

这是一个问题,因为它是一个警告; 我的应用程序中有一个错误,我最终跟踪到以下内容:在prepareForDeletion某个NSManagedObject子类中,我正在访问一个通过执行获取请求按需创建的数组.如果该数组在prepareForDeletion调用时已经存在(因此当不需要获取请求时)一切正常,但是如果数组尚未加载并且执行了获取请求,则似乎删除了对象 - 关于 -当执行fetch时,实际上已完成了要删除的操作,因此无法prepareForDeletion完成其任务.我找不到其他任何人抱怨这个,但是,在文档中也没有提到它,所以也许是其他的东西.我很好奇其他人是否看到过这种行为.

iphone core-data objective-c ios

6
推荐指数
1
解决办法
313
查看次数

标签 统计

core-data ×2

ios ×2

iphone ×2

objective-c ×2

ipad ×1

uisearchbar ×1

uitableview ×1