0

NSMutableArray在 managerViewController 中有七个布尔值,它们代表一周中商店营业的日子。我在此视图中的空间不足,大多数情况下,用户会对所有时间开放的默认设置感到满意。

用户需要能够更改它们以适应他们的业务需求,我目前的方法是拥有七行的 uitableview,所有这些行中都有开关。我被卡住的地方是如何在 uitableview 中修改 manageViewController 类中的原始 nsmuntable 数组。

我是 iOS 新手,但我已经构建了UITableView所有其他位,它只是访问NSMutableArray我被卡住的。

4

4 回答 4

0

当表格视图在

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath;

确保检查所有开关的初始值并从数据源(可变数组)中设​​置值。为了轻松处理这种情况,请使用自定义并将其对象放入数组中。

@interface Days : NSObject
@property (nonatomic, retain) NSString *day;
@property (nonatomic, assign) BOOL isOpen;
@end

IE

for(int ii = 0; ii < 7; ii++ ){
    Days *days = [[Days alloc] initWithDay:ii isOpen:YES];
    [array addObject:days];
    [days release];  
}

假设您有一个自定义 UITableViewCell,它的属性设置为开关。例如,我正在使用 cell.switch。

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
    static NSString *identifier = @"reusableCells";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:identifier];
   if(cell == nil)
       cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:identifier] autorelease];

    Days *days = [array objectAtIndex:indexPath.row];
    cell.textLabel.text = days.day;
    [cell.switch setOn:days.isOpen animated:YES];

    return cell;
}

这将处理您的开关。现在假设您在按下表格单元格时打开/关闭开关,因此处理 tableview 委托的 didSelectRowAtIndexPath 方法

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
    [tableView deselectRowAtIndexPath:indexPath animated:YES];
    UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
    Days *days = [array objectAtIndex:indexPath.row];
    days.isOpen != days.isOpen;
    [cell.switch setOn:days.isOpen animated:YES];
}

就这样。您将打开/关闭开关,并将从阵列中进行操作。

于 2013-06-04T10:53:36.257 回答
0

您可以使用应用程序的应用委托类来访问 NSMutableArray。

在应用程序委托类中,为存在 NSMutableArray 的类创建属性,例如假设类名是 TestController。

//then in .h file of Appdelegate

#import TestController.h

//in the interface 

TestController *objTest;

//declare the property
@property (nonatomic, strong) TestController *objTest;


//then in the .m file of app delegate synthesize the object
@synthesize objTest;

现在以类似的方式在 TestController 中声明 NSMutableArray 的属性

创建要访问 NSMutable 数组对象(例如 arr1)的应用程序委托类的共享实例,如下所示

AppDelegate *objAppDelegate = (AppDelegate*)[[UIApplication sharedApplication] delegate];

您可以将该数组作为“objAppDelegate.objTest.arr1”访问

或者

您可以在视图控制器类中创建共享实例

//in the .h of view controller
+ (id)sharedInstance;

//in the .m of view controller

+ (id)sharedInstance
{
    // structure used to test whether the block has completed or not
    static dispatch_once_t p = 0;

    // initialize sharedObject as nil (first call only)
    __strong static id _sharedObject = nil;

    // executes a block object once and only once for the lifetime of an application
    dispatch_once(&p, ^{
        _sharedObject = [[self alloc] init];
    });


    // returns the same object each time
    return _sharedObject;
}

然后在填充数组使用的应用程序中,

TestViewController *objTest=[TestViewController sharedInstance];
objTest.arr1=[[NSMutableArray alloc]initWithObjects:@"1",@"1",@"1",@"1", nil];

在表格视图控制器中,您可以按如下方式访问它

TestViewController *objTest=[TestViewController sharedInstance];

objTest.arr1 将是结果数组。

于 2013-06-04T12:04:10.900 回答
0

使用replaceObjectAtIndex:withObject:or,使用新的 objective-c 文字,它更容易:

NSMutableArray *myArray = [NSMutableArray array];
myArray[0] = @(YES); // the same as: [myArray addObject:[NSNumber numberWithBool:YES]];
myArray[0] = @(NO); // the same as: [myArray replaceObjectAtIndex:0 withObject:[NSNumber numberWithBool:YES]];
于 2013-06-04T10:12:07.720 回答
0

为您的表视图控制器定义一个委托,例如TableViewControllerDelegate. 将委托属性添加到您的表视图控制器 @property (weak, nonatomic) id delegate;

使您ManagerViewController符合委托协议,并在显示TableViewController时将其委托设置为您的ManagerViewController实例。

在委托中添加一个方法来通知一天的操作,例如:

- (void) didModifyDay:(NSInteger)dayNumber;

或者

- (void) didChangeDay:(NSInteger)dayNumber toState:(BOOL)selected;
于 2013-06-04T10:13:32.843 回答