Math Problem
I create a small view that has the format of a math problem. For some reason I couldn't reduce the size of the view from the size of an Ipad View in interface builder, however I put everything in the upper left corner and managed to reduce the size in the code:
This consists of several labels which the code will update. I named them appropriately so that it was easier to monitor the connections.
Of course it looks a little silly in the full window:
And I have everything hooked up the class in interface builder, (along with a custom hidden button to detect clicks)
This shows the connections to the actual class.
The header contains the outlets and a few actions, right now I have a forward delelaration of the controller class which allows me to update which item is currently selected. I later intend to change it to a protocol which will allow more flexibility.
@class MathDrillViewController;
@interface MathProblem : UIViewController {
IBOutlet UILabel *first;
IBOutlet UILabel *second;
IBOutlet UILabel *result;
int correctResult;
int currentResult;
MathDrillViewController *controller;
}
@property (nonatomic,retain) UILabel *first;
@property (nonatomic,retain) UILabel *second;
@property (nonatomic,retain) UILabel *result;
@property (nonatomic) int correctResult;
@property (nonatomic) int currentResult;
@property (nonatomic,retain) MathDrillViewController *controller;
- (IBAction) setFocus:(id) sender;
- (void) setChoice:(int) choice;
- (void) clear;
- (id) initWithMax:(int) maxValue;
- (void) checkResult;
@end
The main class contains the ability to change the labels as I randomly generate a subtraction problem. Note that by adding an outlet for the operator, I could also change the operator if I so choose.
#import "MathProblem.h"
@implementation MathProblem
@synthesize currentResult;
@synthesize correctResult;
@synthesize first;
@synthesize result;
@synthesize second;
@synthesize controller;
/*
// The designated initializer. Override if you create the controller programmatically and want to perform customization that is not appropriate for viewDidLoad.
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
if ((self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil])) {
// Custom initialization
}
return self;
}
*/
// Implement viewDidLoad to do additional setup after loading the view, typically from a nib.
- (void)viewDidLoad {
[super viewDidLoad];
self.view.backgroundColor=[UIColor yellowColor];
int ifirst=arc4random()%10+1;
int isecond=arc4random()%ifirst+1;
correctResult=ifirst-isecond;
first.text=[NSString stringWithFormat:@"%d",ifirst];
second.text=[NSString stringWithFormat:@"%d",isecond];
result.text=@"?";
//return self;
}
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
// Overriden to allow any orientation.
return YES;
}
- (void)didReceiveMemoryWarning {
// Releases the view if it doesn't have a superview.
[super didReceiveMemoryWarning];
// Release any cached data, images, etc that aren't in use.
}
- (void)viewDidUnload {
[super viewDidUnload];
// Release any retained subviews of the main view.
// e.g. self.myOutlet = nil;
}
- (void)dealloc {
[super dealloc];
}
- (IBAction) setFocus:(id) sender
{
if (self.controller.currentProblem!=nil)
{
self.controller.currentProblem.view.backgroundColor=[UIColor yellowColor];
}
self.view.backgroundColor=[UIColor blueColor];
self.controller.currentProblem=self;
}
- (void) setChoice:(int) choice
{
result.text=[NSString stringWithFormat:@"%d", choice];
if (choice==correctResult)
self.view.backgroundColor=[UIColor greenColor];
else {
self.view.backgroundColor=[UIColor redColor];
}
}
- (void) clear
{
}
- (id) initWithMax:(int) maxValue
{
return self;
}
- (void) checkResult
{
}
@end
No comments:
Post a Comment