使用文本字段另存为功能
Posted
技术标签:
【中文标题】使用文本字段另存为功能【英文标题】:Save as feature using textfields 【发布时间】:2013-12-06 23:57:44 【问题描述】:在我的应用程序中,文本字段位于不同的视图中,它们都是一个数组的一部分,但有几个数组具有不同的文本字段值。例如,在一个数组的第一个文本字段中可能有 2,在第二个文本字段中可能有 5,但在另一个数组中的第一个文本字段中可能有 6,在第二个文本字段中可能有 4。当您单击 saveAs 按钮时,它将带您到 NameSaveAsView 那里有另一个文本字段。此文本字段将为该数组指定一个名称,这样当您进入 OpenShiftView 时,您会在 tableview 单元格中看到每个名称,并且可以加载您想要的数组。这是到目前为止我认为应该可以工作的代码,但是每当我测试它时,它都可以正常工作,除了 OpenShiftView 只是加载了空单元格。我的代码有什么问题?感谢您的帮助。
//
// NameSaveAsViewController.m
// ShiftCalculator
//
// Created by John on 21/11/2013.
// Copyright (c) 2013 John. All rights reserved.
//
#import "NameSaveAsViewController.h"
@implementation NameSaveAsViewController
@synthesize saveAsText, normalWage, overtimeWage, mondayNormalTime, mondayOverTime,
tuesdayNormalTime, tuesdayOverTime, wednesdayNormalTime, wednesdayOverTime,
thursdayNormalTime, thursdayOverTime, fridayNormalTime, fridayOverTime,
saturdayNormalTime, saturdayOverTime, sundayNormalTime, sundayOverTime, bonusMoney,
tArray, string5, mArray;
-(void)viewDidLoad
[super viewDidLoad];
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self
action:@selector(dismissKeyboard:)];
[self.view addGestureRecognizer:tap];
- (void)dismissKeyboard:(id)sender
if ([saveAsText isEditing])
[saveAsText resignFirstResponder];
- (void)textFieldDidEndEditing:(UITextField *)textField
saveAsText.placeholder = @"Shift Name";
NSString *string5 = saveAsText.text;
- (void)saveAs:(id)sender
[mArray addObject:string5];
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:mArray forKey:@"saveArray"];
NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
[defaults setObject:strings forKey:@"saveArray2"];
@end
//
// OpenShiftViewController.m
// ShiftCalculator
//
// Created by John on 21/11/2013.
// Copyright (c) 2013 John. All rights reserved.
//
#import "OpenShiftViewController.h"
@implementation OpenShiftViewController
@synthesize textFields, arr, myMutableArray, myDictionary, defaults;
- (void)viewDidLoad
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
myDictionary = [defaults dictionaryRepresentation];
self.arr = [defaults arrayForKey:@"saveArray"];
-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
return 1;
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
return arr.count;
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath
*)indexPath
static NSString *CellIdentifier = @"cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (!cell)
cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleSubtitle
reuseIdentifier:CellIdentifier];
cell.textLabel.text = [arr objectAtIndex:indexPath.row];
return cell;
@end
【问题讨论】:
我真的无法理解你想要达到的目标 如果没有看到OpenShiftViewController
的头文件就无法判断,但看起来您正在声明一个局部变量 arr
屏蔽一个实例变量,也称为 arr
。如果您将-viewDidLoad
中的行更改为self.arr = [defaults arrayForKey:@"saveArray"];
会发生什么另外您将相同的值分配给同一单元格中的两个标签,这看起来很奇怪,viewDidLoad
的结尾显然未完成,因为它调用了一个空方法
我基本上是在尝试使用文本字段创建另存为功能。
【参考方案1】:
你需要弄清楚局部变量的概念。您在 viewDidLoad 中定义的“arr”和 textFieldDidEndEditing 中的“mArray”仅存在于这些方法中。您似乎还有其他与实例变量同名的变量,但它们并不相同。
总的来说,这些问题几乎肯定是造成您所看到的症状的原因。尝试使用您的实例变量而不是创建本地变量。
【讨论】:
如果你用新代码更新你的问题,也许有人会弄清楚还有什么问题。 您仍在创建掩盖实例变量的局部变量。在新代码中,它是NSString *string5 = saveAsText.text;
。这与您在 saveAs:
方法中使用的 string5
不同。以上是关于使用文本字段另存为功能的主要内容,如果未能解决你的问题,请参考以下文章
求问怎么用VC++设计一个文本文件编辑器应具备打开、存盘、另存为等功能