Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ios 7 uitableview单元格长按可更改核心数据属性的值_Ios_Uitableview_Ios7_Uigesturerecognizer_Long Press - Fatal编程技术网

ios 7 uitableview单元格长按可更改核心数据属性的值

ios 7 uitableview单元格长按可更改核心数据属性的值,ios,uitableview,ios7,uigesturerecognizer,long-press,Ios,Uitableview,Ios7,Uigesturerecognizer,Long Press,我使用的核心数据有一个实体和几个属性。其中一个属性名为ToDoStatus。实体记录列表显示在tableview上,我希望实现以下要求: 1.当用户长按单元格(约1秒)时,被按下的记录必须将其TodStatus值更改为“完成”,然后使用TodStatus=“完成”重新加载不显示记录的tableview。 这是我当前的代码: #import "RootViewController.h" #import "AddToDoViewController.h" #import "EditToDoViewC

我使用的核心数据有一个实体和几个属性。其中一个属性名为ToDoStatus。实体记录列表显示在tableview上,我希望实现以下要求: 1.当用户长按单元格(约1秒)时,被按下的记录必须将其TodStatus值更改为“完成”,然后使用TodStatus=“完成”重新加载不显示记录的tableview。 这是我当前的代码:

#import "RootViewController.h"
#import "AddToDoViewController.h"
#import "EditToDoViewController.h"
#import "MenuViewController.h"


@interface RootViewController ()
- (void)configureCell:(UITableViewCell *)cell atIndexPath:(NSIndexPath *)indexPath;
@end


@implementation RootViewController

@synthesize fetchedResultsController, managedObjectContext,AddToDoButton,MenuToDoButton;


#pragma mark -
#pragma mark View lifecycle

- (void)viewDidLoad {

  [super viewDidLoad];
//  [self setTitle:@"Today"];
  [[self navigationItem] setRightBarButtonItem:[self editButtonItem]];
    self.editButtonItem.tintColor = [UIColor redColor];

    UILabel *lblTitle = [[UILabel alloc] init];
    lblTitle.text = @"Today";
    lblTitle.backgroundColor = [UIColor clearColor];
    lblTitle.textColor = [UIColor blueColor];
    lblTitle.shadowColor = [UIColor whiteColor];
    lblTitle.shadowOffset = CGSizeMake(0, 1);
    lblTitle.font = [UIFont fontWithName:@"Noteworthy" size:25.0];
    [lblTitle sizeToFit];

    self.navigationItem.titleView = lblTitle;



    [self.editButtonItem setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:
                                     [UIFont fontWithName:@"Noteworthy" size:20], NSFontAttributeName,
                                     [UIColor blueColor], NSForegroundColorAttributeName,
                                     nil]
                           forState:UIControlStateNormal];







    self.tableView.delegate = self;
    self.tableView.dataSource = self;


  NSError *error = nil;
  if (![[self fetchedResultsController] performFetch:&error])
  {
    NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
    abort();
  }
}
- (void) viewWillAppear:(BOOL)animated{
    NSError *error = nil;
    if (![[self fetchedResultsController] performFetch:&error])
    {
        NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
        abort();
    }
    [self.tableView reloadData];
}
- (void)configureCell:(UITableViewCell *)cell atIndexPath:(NSIndexPath *)indexPath
{
  NSManagedObject *managedObject = [fetchedResultsController objectAtIndexPath:indexPath];





  [[cell textLabel] setText:[[managedObject valueForKey:@"thingName"] description]];
  NSString *myString = [NSString stringWithFormat:@"%@",[[managedObject valueForKey:@"todoYear"] description]];
    UIButton *urgentButton = [[UIButton alloc]initWithFrame:CGRectMake(15, 25, 18, 18)];

    [urgentButton setImage:[UIImage imageNamed:@"urgent"]forState:UIControlStateNormal];
    [cell addSubview:urgentButton];

    UIButton *yellowButton = [[UIButton alloc]initWithFrame:CGRectMake(305, 5, 10, 40)];

    [yellowButton setImage:[UIImage imageNamed:@"Red"]forState:UIControlStateNormal];
    [cell addSubview:yellowButton];

    UIButton *doneButton = [[UIButton alloc]initWithFrame:CGRectMake(33, 27, 18, 18)];

    [doneButton setImage:[UIImage imageNamed:@"alldone"]forState:UIControlStateNormal];
    [cell addSubview:doneButton];

    UIButton *doneButton2 = [[UIButton alloc]initWithFrame:CGRectMake(53, 27, 18, 18)];

    [doneButton2 setImage:[UIImage imageNamed:@"alldone"]forState:UIControlStateNormal];
    [cell addSubview:doneButton2];



    UIButton *doneButton3 = [[UIButton alloc]initWithFrame:CGRectMake(71, 27, 18, 18)];

    [doneButton3 setImage:[UIImage imageNamed:@"urgent"]forState:UIControlStateNormal];
    [cell addSubview:doneButton3];


    [[cell detailTextLabel] setText:@"  "];
  [cell setSelectionStyle:UITableViewCellSelectionStyleNone];
    cell.textLabel.textColor = [UIColor blueColor];
    cell.textLabel.font = [UIFont fontWithName:@"Noteworthy" size:22.0f];
    cell.detailTextLabel.font = [UIFont fontWithName:@"Noteworthy" size:15.0f];

}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {


    EditToDoViewController *detailViewController = [[EditToDoViewController alloc] initWithNibName:@"EditToDoViewController" bundle:nil];
    NSManagedObject *selectedObject = [[self fetchedResultsController] objectAtIndexPath:indexPath];
    detailViewController.selectedObject = selectedObject;
    //[self.navigationController pushViewController:detailViewController animated:YES];

    [self presentViewController:detailViewController animated:YES completion:nil];
}




#pragma mark -
#pragma mark Table view data source
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
  return [[fetchedResultsController sections] count];
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
  id <NSFetchedResultsSectionInfo> sectionInfo = [[fetchedResultsController sections] objectAtIndex:section];
  return [sectionInfo numberOfObjects];
}



- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
  static NSString *CellIdentifier = @"Cell";

  UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
  if (cell == nil)
  {
    cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle 
                                   reuseIdentifier:@"Cell"] autorelease];
  }

  [self configureCell:cell atIndexPath:indexPath];

  return cell;
}

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
  if (editingStyle == UITableViewCellEditingStyleDelete)
  {
    NSManagedObjectContext *context = [fetchedResultsController managedObjectContext];
    [context deleteObject:[fetchedResultsController objectAtIndexPath:indexPath]];

    NSError *error = nil;
    if (![context save:&error])
    {
      NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
      abort();
    }
  }   
}

- (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath
{
  return YES;
}

- (void)tableView:(UITableView *)tableView 
moveRowAtIndexPath:(NSIndexPath *)sourceIndexPath 
      toIndexPath:(NSIndexPath *)destinationIndexPath;
{  
  NSMutableArray *things = [[fetchedResultsController fetchedObjects] mutableCopy];

  // Grab the item we're moving.
  NSManagedObject *thing = [[self fetchedResultsController] objectAtIndexPath:sourceIndexPath];

  // Remove the object we're moving from the array.
  [things removeObject:thing];
  // Now re-insert it at the destination.
  [things insertObject:thing atIndex:[destinationIndexPath row]];

  // All of the objects are now in their correct order. Update each
  // object's displayOrder field by iterating through the array.
  int i = 0;
  for (NSManagedObject *mo in things)
  {
    [mo setValue:[NSNumber numberWithInt:i++] forKey:@"displayOrder"];
  }

  [things release], things = nil;

  [managedObjectContext save:nil];
}






#pragma mark -
#pragma mark Fetched results controller
- (IBAction)AddToDoAction:(id)sender {

    AddToDoViewController *viewController = [[AddToDoViewController alloc] init];
    [self presentViewController:viewController animated:YES completion:nil];

}
#pragma mark Fetched results controller
- (IBAction)MenuToDoAction:(id)sender {

    MenuViewController *viewController = [[MenuViewController alloc] init];
    [self presentViewController:viewController animated:YES completion:nil];

}

- (NSFetchedResultsController *)fetchedResultsController
{
  if (fetchedResultsController) return fetchedResultsController;

  NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
  NSEntityDescription *entity = 
               [NSEntityDescription entityForName:@"FavoriteThing" 
                           inManagedObjectContext:managedObjectContext];

  [fetchRequest setEntity:entity];

  NSSortDescriptor *sortDescriptor = 
              [[NSSortDescriptor alloc] initWithKey:@"displayOrder" 
                                          ascending:YES];

  NSArray *sortDescriptors = [[NSArray alloc] 
                              initWithObjects:sortDescriptor, nil];



    NSNumber *yearBuscado = @2013;
    NSNumber *mesBuscado = @12;
    NSNumber *diaBuscado = @13;
    NSString *tipourgente = @"Urgent";
    NSString *tipocolor = @"Yellow";
    NSPredicate *yearPredicate = [NSPredicate predicateWithFormat:@"todoYear == %@", yearBuscado];
    NSPredicate *monthPredicate = [NSPredicate predicateWithFormat:@"todoMonth == %@", mesBuscado];
    NSPredicate *dayPredicate = [NSPredicate predicateWithFormat:@"todoDay == %@", diaBuscado];
    NSPredicate *urgentPredicate = [NSPredicate predicateWithFormat:@"urgent == %@", tipourgente];
    NSPredicate *colorPredicate = [NSPredicate predicateWithFormat:@"color == %@", tipocolor];

  [fetchRequest setSortDescriptors:sortDescriptors];






  NSPredicate *busqueda = [NSCompoundPredicate andPredicateWithSubpredicates:@[yearPredicate, monthPredicate,dayPredicate,urgentPredicate]];

    [fetchRequest setPredicate:busqueda];
  NSFetchedResultsController *aFetchedResultsController =
              [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest 
                                                  managedObjectContext:managedObjectContext
                                                    sectionNameKeyPath:nil cacheName:nil];
  aFetchedResultsController.delegate = self;
  [self setFetchedResultsController:aFetchedResultsController];


  [aFetchedResultsController release];
  [fetchRequest release];
  [sortDescriptor release];
  [sortDescriptors release];


  return fetchedResultsController;
}    

- (void)dealloc {
  [fetchedResultsController release];
  [managedObjectContext release];


  [super dealloc];
}


@end
#导入“RootViewController.h”
#导入“AddToProviewController.h”
#导入“edittooviewcontroller.h”
#导入“MenuViewController.h”
@接口RootViewController()
-(void)configureCell:(UITableViewCell*)单元格atIndexPath:(NSIndexPath*)indexPath;
@结束
@RootViewController的实现
@综合fetchedResultsController、managedObjectContext、AddToDoButton、MenuToButton;
#布拉格标记-
#pragma标记视图生命周期
-(无效)viewDidLoad{
[超级视图下载];
//[自设标题:@“今天”];
[[self-navigationItem]setRightBarButtonItem:[self-editButtonItem]];
self.editButtonItem.tintColor=[UIColor redColor];
UILabel*lblTitle=[[UILabel alloc]init];
lblTitle.text=@“今天”;
lblTitle.backgroundColor=[UIColor clearColor];
lblTitle.textColor=[UIColor blueColor];
lblTitle.shadowColor=[UIColor-whiteColor];
lblTitle.shadowOffset=CGSizeMake(0,1);
lblTitle.font=[UIFont fontWithName:@“值得注意的”大小:25.0];
[lbltile sizeToFit];
self.navigationItem.titleView=lblTitle;
[self.editButtonItem setTitleTextAttributes:[NSDictionary Dictionary Dictionary WithObjectsAndKeys:
[UIFont fontWithName:@“值得注意的”大小:20],NSFontAttributeName,
[UIColor blueColor],NSForegroundColorAttributeName,
无]
forState:uicontrol状态正常];
self.tableView.delegate=self;
self.tableView.dataSource=self;
n错误*错误=nil;
如果(![[self-fetchedResultsController]性能检测:&错误])
{
NSLog(@“未解决的错误%@,%@”,错误,[error userInfo]);
中止();
}
}
-(无效)视图将显示:(BOOL)动画{
n错误*错误=nil;
如果(![[self-fetchedResultsController]性能检测:&错误])
{
NSLog(@“未解决的错误%@,%@”,错误,[error userInfo]);
中止();
}
[self.tableView重载数据];
}
-(void)configureCell:(UITableViewCell*)单元格atIndexPath:(NSIndexPath*)indexPath
{
NSManagedObject*managedObject=[fetchedResultsController对象索引路径:indexPath];
[[cell textLabel]setText:[[managedObject valueForKey:@“thingName”]描述]];
NSString*myString=[NSString stringWithFormat:@“%@,[[managedObject valueForKey:@“todoYear”]description]];
UIButton*urgentButton=[[UIButton alloc]initWithFrame:CGRectMake(15,25,18,18)];
[urgentButton设置图像:[UIImage ImageName:@“紧急”]用于状态:UIControlStateNormal];
[单元格添加子视图:urgentButton];
UIButton*yellowButton=[[UIButton alloc]initWithFrame:CGRectMake(305,5,10,40)];
[黄色按钮设置图像:[UIImage ImageName:@“红色”]用于状态:UIControlStateNormal];
[单元格添加子视图:黄色按钮];
UIButton*doneButton=[[UIButton alloc]initWithFrame:CGRectMake(33,27,18,18)];
[doneButton setImage:[UIImage ImageName:@“alldone”]用于状态:UIControlStateNormal];
[单元格添加子视图:doneButton];
UIButton*doneButton2=[[UIButton alloc]initWithFrame:CGRectMake(53,27,18,18)];
[doneButton2 setImage:[UIImage ImageName:@“alldone”]用于状态:UIControlStateNormal];
[单元格添加子视图:doneButton2];
UIButton*doneButton3=[[UIButton alloc]initWithFrame:CGRectMake(71,27,18,18)];
[doneButton3 setImage:[UIImage ImageName:@“紧急”]用于状态:UIControlStateNormal];
[单元格添加子视图:doneButton3];
[[cell detailTextLabel]setText:@'';
[单元格设置选择样式:UITableViewCellSelectionStyleNone];
cell.textlab.textColor=[UIColor blueColor];
cell.textLabel.font=[UIFont fontWithName:@“值得注意的”大小:22.0f];
cell.detailTextLabel.font=[UIFont fontWithName:@“值得注意的”大小:15.0f];
}
-(void)tableView:(UITableView*)tableView未选择RowatineXpath:(NSIndexPath*)indexPath{
EDITODOVIEWCONTROLLER*detailViewController=[[EDITODOVIEWCONTROLLER alloc]initWithNibName:@“EDITODOVIEWCONTROLLER”捆绑包:nil];
NSManagedObject*selectedObject=[[self-fetchedResultsController]对象索引路径:indexPath];
detailViewController.selectedObject=selectedObject;
//[self.navigationController pushViewController:detailViewController动画:是];
[self-presentViewController:detailViewController动画:是完成:无];
}
#布拉格标记-
#pragma标记表视图数据源
-(NSInteger)表格视图中的节数:(UITableView*)表格视图
{
返回[[fetchedResultsController节]计数];
}
-(NSInteger)表视图:(UITableView*)表视图行数节:(NSInteger)节
{
id sectionInfo=[[fetchedResultsController节]对象索引:节];
返回[sectionInfo numberOfObjects];
}
-(UITableViewCell*)tableView:(UITableView*)tableView cellForRowAtIndexPath:(NSIndexPath*)indexPath
{
静态NSString*CellIdentifier=@“Cell”;
UITableViewCell*单元格=[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
如果(单元格==nil)
{
单元格=[[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleSubtitle
重用标识符:@“Cell”]自动释放];
}
[self-configureCell:cell-atIndexPath:indexPath];
返回单元;
}
-(void)tableView:(UITableView*)tableView提交的编辑样式:(UITableViewCellEditingStyle)行的编辑样式索引路径:(NSIndexPath*)索引路径
{
如果(editingStyle==UITableViewCellEditingStyleDelete)
{
NSManagedObjectContext*上下文=[fetchedResultsController managedObjectContext];
[context deleteObject:[fetchedResultsController对象索引路径:i]
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil)
    {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle 
        reuseIdentifier:@"Cell"] autorelease];
    }

    UILongPressGestureRecognizer *lpgr = [[UILongPressGestureRecognizer alloc]
                     initWithTarget:self action:@selector(handleLongPress:)];
    lpgr.minimumPressDuration = 1.0; //seconds
    [cell addGestureRecognizer:lpgr];

    [self configureCell:cell atIndexPath:indexPath];

    return cell;
}

-(void)handleLongPress:(UILongPressGestureRecognizer *)gestureRecognizer 
{
            CGPoint p = [gestureRecognizer locationInView:self.tableView];

            NSIndexPath *indexPath = [self.tableView indexPathForRowAtPoint:p];
            if (indexPath == nil)
               NSLog(@"long press on table view but not on a row");
            else
            {
                 if (gestureRecognizer.state == UIGestureRecognizerStateEnded) {
                     NSLog(@"UIGestureRecognizerStateEnded");
                     //Do Whatever You want on End of Gesture
                 }
                 else if (gestureRecognizer.state == UIGestureRecognizerStateBegan){

                     UIAlertView *alert = [[UIAlertView alloc] initWithTitle: @"Announcement" message: @"You have long-pressed the row...!" delegate: nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
                     [alert show];
                     [alert release];
                     NSLog(@"UIGestureRecognizerStateBegan.");


                     NSLog(@"long press on table view at row %d", indexPath.row);

                     // Update ToDoStatus
                    [self.tableView reloadData];
                    //Do Whatever You want on Began of Gesture
                 }
            }
}