单击操作表Objective-C Prime No,从文本字段输入的值时填充TableView
Posted
技术标签:
【中文标题】单击操作表Objective-C Prime No,从文本字段输入的值时填充TableView【英文标题】:Populating TableView upon clicking action sheet Objective-C Prime No, value entered from textfield 【发布时间】:2016-08-18 18:38:47 【问题描述】:当我从 PRIME 类中导入可变数组“primearray”并将其分配给视图控制器中声明的 nsmutablearray“数组”时,它会引发错误。
基本上我正在尝试使用 nsmutablearry 的内容填充 tableview。
在类中声明的这个可变数组的内容取决于用户在操作表中按下 index:0 处的按钮。
谁能帮忙???提前致谢。
IBOutlet UITextField *txt1;
IBOutlet UITextField *txt2;
NSMutableArray *arry;
int startno;
int endno;
@property IBOutlet UITableView *tbl;
-(IBAction)ok:(id)sender;
@end
VIEWCONTROLLER.H 文件结束
ViewController.m
#import "ViewController.h"
#import "PRIME.h"
#import "NON-PRIME.h"
#import "ODD.h"
#import "EVEN.h"
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
arry=[[NSMutableArray alloc]init];
- (BOOL)textFieldShouldReturn:(UITextField *)textField
[textField resignFirstResponder];
return YES;
-(IBAction)ok:(id)sender
// arry=[[NSMutableArray alloc]init];
startno=[txt1.text intValue];
endno=[txt2.text intValue];
if(startno ==0 || endno ==0 || startno > endno)
UIAlertView *alert=[[UIAlertView alloc]initWithTitle:@"CHECK INPUT "message:@"input must not be nil,zero or alphabet & endno must be greater than startno" delegate:self cancelButtonTitle:@"CANCEL" otherButtonTitles:nil, nil];
[alert show];
else
//if (startno !=0 || endno !=0 || !(startno > endno))
NSLog(@"1....start @%d, end @%d",startno,endno);
UIActionSheet *action=[[UIActionSheet alloc]initWithTitle:@"select your choice" delegate:self cancelButtonTitle:@"cancel:" destructiveButtonTitle:nil otherButtonTitles:@"prime",@"non-prime",@"odd",@"even", nil];
[action showInView:self.view];
- (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex: (NSInteger)buttonIndex
if(buttonIndex==0)
NSLog(@"2...start @%d, end @%d",startno,endno);
PRIME *prime=[[PRIME alloc]init];
[prime setnumbers1:startno sec:endno];
[arry addObjectsFromArray:[prime primecal]];
for(int i=0;i<arry.count;i++)
NSLog(@"count : @%d",i);
for(count1 in arry)
NSLog(@" arry %@ ",count1);
if(buttonIndex==1)
NON_PRIME *nonprimeobj=[[NON_PRIME alloc]init];
if(buttonIndex==2)
ODD *oddobj=[[ODD alloc]init];
if(buttonIndex==3)
EVEN *evenobj=[[EVEN alloc]init];
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
return arry.count;
- (UITableViewCell *)tableView:(UITableView *)
tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
UITableViewCell *cell;
if(cell==nil)
cell=[[UITableViewCell alloc]initWithStyle:
UITableViewCellStyleSubtitle reuseIdentifier:@"A"];
cell.textLabel.text=[arry objectAtIndex:indexPath.row];
return cell;
- (void)didReceiveMemoryWarning
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
@end
视图控制器.m 文件结束
@interface PRIME : NSObject
int i,start,end;
int remain,k,p;
int count;
//int count=0; //error????
@property(strong,nonatomic) NSMutableArray *primearray;
- (void)setnumbers1:(int)start1 sec:(int)end1;
-(NSMutableArray *)primecal;
PRIME.H 类结束
#import "PRIME.h"
@implementation PRIME
-(void)setnumbers1:(int)start1 sec:(int)end1
start=start1;
end=end1;
-(NSMutableArray *)primecal
NSMutableArray *primearray=[[NSMutableArray alloc]init];
for(i=start;i<=end;i++)
for(p=2;p<=1;p++)
remain=i%p;
p++;
if(p==i)
[primearray addObject:[NSString stringWithFormat:@"%d",i]];
count++;
return primearray;
@end
PRIME.M 类结束
【问题讨论】:
@ReinierMelian 在 PRIME 类中 查看我的回答希望对你有帮助 @ReinierMelian 感谢您的帮助,现在它变得更清晰了,但是我如何处理从操作表 clickedbuttonatindex 方法调用表格视图 [索引 0 用于 Prime 无生成] @ReinierMelian 我已经声明了 Tableview cellforrowatindexpath 函数。但是我如何从 if(buttonindex==0) 调用这个函数。如果你能帮助我解决这个问题,我将不胜感激。 您只需拨打您的[self.tableView reloadData]
,检查我的答案是否已更新
【参考方案1】:
您遇到的主要问题是您想使用 PRIME 类中的方法,但您根本没有初始化或使用
我认为不是
arry=[[NSMutableArray alloc]init];
startno=[txt1.text intValue];
endno=[txt2.text intValue];
arry=[arry addObject: primearray]; //
你需要这样的东西
NSMutableArray * arry = [NSMutableArray array];
startno=[txt1.text intValue];
endno=[txt2.text intValue];
PRIME * prime = [[PRIME alloc]init];
[prime setnumbers1:startno sec:endno];
[arry addObjectsFromArray:[prime primeCal]];
这是在使用你的 actionSheet
- (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex: (NSInteger)buttonIndex
if(buttonIndex==0)
startno=[txt1.text intValue];
endno=[txt2.text intValue];
PRIME * prime = [[PRIME alloc]init];
[prime setnumbers1:startno sec:endno];
[arry addObjectsFromArray:[prime primeCal]];
[self.tableView reloadData]
if(buttonIndex==1)
NON_PRIME *nonprimeobj=[[NON_PRIME alloc]init];
if(buttonIndex==2)
ODD *oddobj=[[ODD alloc]init];
if(buttonIndex==3)
EVEN *evenobj=[[EVEN alloc]init];
希望对你有帮助。
【讨论】:
@Reiner Meilian 那么一旦用户点击 buttonatindex:0 -(void)actionSheet: (UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex if(buttonIndex==0) 我应该如何访问表格视图) 您需要在用户触摸您的actionSheet的buttonIndex 0后显示素数吗? @kumar 告诉我你是否最终实现了你想做的事情【参考方案2】:唯一缺少的帽子是阻止在正常选项卡的单元格中输出素数;e视图如下添加代码:
- (void)actionSheet:(UIActionSheet *)actionSheet
clickedButtonAtIndex: (NSInteger)buttonIndex
[self.tbl reloadData]; //ADDED
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
return arry.count;
NSLog(@"arry.count @%d",arry.count); /// //STILL not working?????????
【讨论】:
以上是关于单击操作表Objective-C Prime No,从文本字段输入的值时填充TableView的主要内容,如果未能解决你的问题,请参考以下文章
UVA10780 Again Prime? No Time.
在 Objective-C 中使用三元运算符 + && 执行赋值和操作?
AppDelegate 和操作目标(Objective-c 2.0 和 Xcode)