2012-08-15 1 views
0

L'application sur laquelle je travaille permet à l'utilisateur à la fois de lire du texte et de composer du texte, en utilisant différents boutons. Mon problème maintenant est que sur l'écran pour lire le texte, si l'utilisateur tape à l'intérieur de la boîte UITextView utilisée sur l'écran pour écrire du texte, le clavier apparaît. L'UITextView dans ce cas est self.textView; J'ai placé les notifications clavier et la méthode keyboardWillShow dans les instructions if(self.textView), puis j'ai pris soin d'appeler [self.textView removeFromSuperView] et de définir self.textView = nil; au début des méthodes de lecture de texte, mais le clavier apparaît toujours lorsque vous appuyez sur l'espace où self.textView est défini (par programmation, en passant, ne pas utiliser l'IB).Comment garder le clavier caché quand ce n'est pas voulu?

Qu'est-ce que je fais mal?

Editer: Merci pour les réponses, les gars et les filles, mais toujours ce clavier darne revient sans cesse, tout comme le chat dans la chanson .... Voici mon code. Pardonnez sa longueur, s'il vous plaît, si vous le pouvez; si j'ai fait quelque chose de foutu, je ne sais pas où c'est, et je ne sais pas quoi laisser de côté.

Voici viewDidLoad.

-(void)viewDidLoad { 
[super viewDidLoad]; 
self.textView.editable=NO; 
self.textView.userInteractionEnabled = NO; 
UISwipeGestureRecognizer *swipeRight = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(previousHaiku)]; 
swipeRight.numberOfTouchesRequired = 1; 
swipeRight.direction = UISwipeGestureRecognizerDirectionRight; 
[self.view addGestureRecognizer:swipeRight]; 
UISwipeGestureRecognizer *swipeLeft = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(nextHaiku)]; 
swipeLeft.numberOfTouchesRequired = 1; 
swipeLeft.direction = UISwipeGestureRecognizerDirectionLeft; 
[self.view addGestureRecognizer:swipeLeft]; 
NSError *error; 
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *documentsDirectory = [paths objectAtIndex:0]; 
NSString *path = [documentsDirectory stringByAppendingPathComponent:@"gayHaiku.plist"]; 
NSFileManager *fileManager = [NSFileManager defaultManager]; 
if (![fileManager fileExistsAtPath: path]) 
{ 
NSString *bundle = [[NSBundle mainBundle] pathForResource:@"gayHaiku" ofType:@"plist"]; 
[fileManager copyItemAtPath:bundle toPath: path error:&error]; 
} 
self.gayHaiku = [[NSMutableArray alloc] initWithContentsOfFile: path]; 
[self nextHaiku]; 
} 

est ici nextHaiku, la dernière méthode appelée dans viewDidLoad - c'est la méthode de lecture.

-(void)nextHaiku 
{ 
[self.view.layer removeAllAnimations]; 
[self.bar removeFromSuperview]; 
[email protected]""; 
[email protected]""; 
[self.view viewWithTag:1].hidden = NO; 
[self.view viewWithTag:3].hidden = NO; 
int indexOfHaiku; 
NSMutableArray *arrayOfHaikuSeen; 
NSString *cat; 
if (!self.selectedCategory) cat = @"Derfner"; 
else cat = self.selectedCategory; 
NSArray *filteredArray; 
if ([email protected]"all") 
{ 
    filteredArray = self.gayHaiku; 
    indexOfHaiku = self.indxAll; 
    arrayOfHaikuSeen = self.theseAreDoneAll; 
} 
else 
{ 
    indexOfHaiku = ([email protected]"user")?self.indxU:self.indxD; 
    arrayOfHaikuSeen = ([email protected]"user")?self.theseAreDoneU:self.theseAreDoneD; 
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"category == %@", cat]; 
    filteredArray = [self.gayHaiku filteredArrayUsingPredicate:predicate]; 
} 
int array_tot = [filteredArray count]; 
int sortingHat; 
NSString *txt; 
if (array_tot > 0) 
{ 
    if (indexOfHaiku == arrayOfHaikuSeen.count) 
    { 
     while (true) 
     { 
      sortingHat = (arc4random() % array_tot); 
      if (![arrayOfHaikuSeen containsObject:[filteredArray objectAtIndex:sortingHat]]) break; 
     } 
     txt = [[filteredArray objectAtIndex:sortingHat] valueForKey:@"quote"]; 
     if (!arrayOfHaikuSeen || arrayOfHaikuSeen.count==array_tot) 
     { 
      arrayOfHaikuSeen = [[NSMutableArray alloc] init]; 
     } 
     [arrayOfHaikuSeen addObject:[filteredArray objectAtIndex:sortingHat]]; 
     indexOfHaiku = arrayOfHaikuSeen.count; 
     if (arrayOfHaikuSeen.count==filteredArray.count) 
     { 
      [arrayOfHaikuSeen removeAllObjects]; 
      indexOfHaiku=0; 
     } 
    } 
    else 
    { 
     txt = [[arrayOfHaikuSeen objectAtIndex:indexOfHaiku] valueForKey:@"quote"]; 
     indexOfHaiku += 1; 
    } 
} 
//Need to test to make sure it starts over once all 110 haiku have been seen. 

CGSize dimensions = CGSizeMake(320, 400); 
CGSize xySize = [txt sizeWithFont:[UIFont fontWithName:@"Helvetica" size:14.0] constrainedToSize:dimensions lineBreakMode:0]; 
self.haiku_text = [[UITextView alloc] initWithFrame:CGRectMake((320/2)-(xySize.width/2),200,320,200)]; 
self.haiku_text.font = [UIFont fontWithName:@"Helvetica Neue" size:14]; 
self.haiku_text.backgroundColor = [UIColor clearColor]; 
self.haiku_text.text=txt; 
CATransition *transition = [CATransition animation]; 
transition.duration = 0.25; 
transition.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]; 
transition.type = kCATransitionPush; 
transition.subtype =kCATransitionFromRight; 
transition.delegate = self; 
[self.view.layer addAnimation:transition forKey:nil]; 
[self.view addSubview:self.haiku_text]; 

if ([email protected]"user") 
{ 
    self.theseAreDoneU = arrayOfHaikuSeen; 
    self.indxU = indexOfHaiku; 
} 
else if ([email protected]"all") 
{ 
    self.theseAreDoneAll = arrayOfHaikuSeen; 
    self.indxAll = indexOfHaiku; 
} 
else 
{ 
    self.theseAreDoneD = arrayOfHaikuSeen; 
    self.indxD = indexOfHaiku; 
} 
} 

Et voici la méthode d'écriture.

-(void)userWritesHaiku 

//Set up the screen. 
[self clearScreen]; 
self.textView = [[UITextView alloc] initWithFrame:CGRectMake(20, 60, 280, 150)]; 
self.textView.delegate = self; 
self.textView.returnKeyType = UIReturnKeyDefault; 
self.textView.keyboardType = UIKeyboardTypeDefault; 
self.textView.font = [UIFont fontWithName:@"Helvetica Neue" size:14]; 
self.textView.scrollEnabled = YES; 
self.textView.autoresizingMask = UIViewAutoresizingFlexibleHeight; 
self.textView.userInteractionEnabled = YES; 
self.textView.editable=YES; 
self.textView.backgroundColor = [UIColor colorWithRed:217 green:147 blue:182 alpha:.5]; 
[self.view addSubview: self.textView]; 

[self loadNavBar:@"Compose"]; 
[self addLeftButton:@"Instructions" callingMethod:@"haikuInstructions"]; 

//If you've added text before calling haikuInstructions, when you return from haikuInstructions the textView window with the different background color AND the keyboard. 
[self addRightButton:@"Done" callingMethod:@"userFinishedWritingHaiku"]; 
self.titulus.hidesBackButton=YES; 
[self seeNavBar]; 

//Create and add the space for user to write. 
[self createSpaceToWrite]; 
if ([email protected]"") 
{ 
    self.textView.text = self.textToSave; 
} 
[self.view addSubview:self.textView]; 
[self.textView becomeFirstResponder]; 

//Keyboard notifications. 

if (self.textView) 
{ 
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil]; 

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillHide:) name:UIKeyboardWillHideNotification object:nil]; 
} 

}

+0

pouvez-vous décrire plus sur le bouton – Hiren

Répondre

0

Eh bien, il s'est avéré que tout le temps il y avait un UITextView j'avais créé dans le xib et oublié parce qu'il se cachait sous la vue principale - quand j'ai décidé de créer le UITextView par programme je ne me souviens pas de supprimer l'autre, parce que je ne pouvais pas le voir, mais il était là travailler son mal tout le temps. Je ai finalement compris cela après avoir commenté littéralement l'ensemble du code à l'exception de [super viewDidLoad] et en supprimant tout du xib.

1

Lorsque l'utilisateur tape sur le bouton de lecture, je voudrais simplement appeler

self.textView.userInteractionEnabled = NO; 

et quand vous voulez qu'ils l'éditer appel

self.textView.userInteractionEnabled = YES; 
+0

Hélas, rien ne semblait changer quand j'ai essayé cela. –

+0

Désolé, j'ai regardé les docs et c'est la propriété éditable que vous voulez définir pour celui-là. self.textView.editable = NO; par exemple. Heres le lien vers les docs: http://developer.apple.com/library/ios/#DOCUMENTATION/UIKit/Reference/UITextView_Class/Reference/UITextView.html – Jamie

+0

Malheureusement, cela ne semble pas faire l'affaire, non plus. J'ai édité ma question juste au cas où j'ai fait quelque chose de bancal ailleurs ... –

3

try this

[self.textView setEditable:NO]; 
+0

Drat - cela ne semble pas faire quoi que ce soit non plus. J'ai posté mon code ci-dessus dans une édition de la question - peut-être que j'ai fait quelque chose de bizarre et foiré sans m'en rendre compte (ce serait certainement une première ...). –

+0

+1 pour cette invitation moi:] – java

Questions connexes