2010-01-21 17 views
6

पर आईफोन की प्रतिलिपि/पेस्ट नियंत्रण लागू करना मैं स्वीकार करूंगा कि एसओ पर इन पंक्तियों के साथ पहले से ही एक प्रश्न है, लेकिन इसमें कार्यान्वयन के विवरण, एक कामकाजी उत्तर की कमी है, और मैं और अधिक होना चाहता हूं विशिष्ट, तो मुझे लगता है कि एक नया सवाल क्रम में है। जाहिर है, अगर मैं गलत हूं तो मुझे बताएं और हम restart the thread over there पर आज़मा सकते हैं।कस्टम दृश्य/यूवीव सबक्लास

मूल रूप से, जब मैं उपयोगकर्ता लेबल पर रखता हूं तो मैं पेस्टबोर्ड पर टेक्स्ट को यूआईएलएबल में कॉपी करना चाहता हूं। ईमानदारी से करना मुश्किल नहीं है। हालांकि, मुझे लगता है कि दृश्य प्रतिक्रिया प्रदान करने का सबसे अच्छा तरीका उपयोगकर्ता को कॉपी मेनू विकल्प UIMenuController से संकेत देना है।

आईफोन एप्लिकेशन प्रोग्रामिंग गाइड के इवेंट हैंडलिंग सेक्शन के अनुसार, विशेष रूप से Copy, Cut, and Paste Operations पर अनुभाग, कस्टम दृश्य से प्रतिलिपि, कट और/या पेस्ट ऑपरेशन प्रदान करना संभव होना चाहिए।

तो, मैंने गाइड द्वारा वर्णित निम्न कार्यान्वयन के साथ उप-वर्गीकृत UILabel है, लेकिन UIMenuController दिखाई नहीं देगा। वहाँ गाइड और को ऐसा करने के लिए आवश्यक कुछ भी नहीं है कि वहाँ में कोई संकेत नहीं है, और NSLog बयान कंसोल के लिए प्रिंट आउट, यह दर्शाता है कि चयनकर्ता प्रदर्शन किया जा रहा है है जब मैं लेबल पर दबाए रखें:

// 
// CopyLabel.m 
// HoldEm 
// 
// Created by Billy Gray on 1/20/10. 
// Copyright 2010 Zetetic LLC. All rights reserved. 
// 

#import "CopyLabel.h" 

@implementation CopyLabel 

- (void)showCopyMenu { 
    NSLog(@"I'm tryin' Ringo, I'm tryin' reeeeal hard."); 
    // bring up editing menu. 
    UIMenuController *theMenu = [UIMenuController sharedMenuController]; 
    // do i even need to show a selection? There's really no point for my implementation... 
    // doing it any way to see if it helps the "not showing up" problem... 
    CGRect selectionRect = [self frame]; 
    [theMenu setTargetRect:selectionRect inView:self]; 
    [theMenu setMenuVisible:YES animated:YES]; // <-- doesn't show up... 
} 

// obviously, important to provide this, but whether it's here or not doesn't seem 
// to change the fact that the UIMenuController view is not showing up 
- (BOOL)canPerformAction:(SEL)action withSender:(id)sender { 
    BOOL answer = NO; 

    if (action == @selector(copy:)) 
     answer = YES; 

    return answer; 
} 

- (BOOL)canBecomeFirstResponder { 
    return YES; 
} 

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { 
    [self performSelector:@selector(showCopyMenu) withObject:nil afterDelay:0.8f]; 
} 

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event { 
    [NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(showCopyMenu) object:nil]; 
} 

- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event { 
    [NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(showCopyMenu) object:nil]; 
} 

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event { 
    [NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(showCopyMenu) object:nil]; 
} 

@end 

तो, ऐसा करने के लिए किसी और को क्या करना है?

साथ भी निम्न और यह करने के लिए कोशिश कर रहा है, उन लोगों के लिए, आप भी लेबल के लिए 'सक्षम उपयोगकर्ता सहभागिता' सेट करना होगा

संपादित करें:

स्पष्टता के लिए, मुझे लगता है कि जोड़ें यह उस छोटे [कॉपी] मेनू आइटम जैसा होना चाहिए जो कुछ आईफोन दृश्यों में एक छवि पर दिखाई देता है जब आप इसे दबाते हैं। -बी

+1

एक बार जब मैं यह काम कर रहा हूं, तो मैंने मोबाइल ऑर्चर्ड पर एक ट्यूटोरियल और नमूना प्रोजेक्ट एक साथ रखा: http://www.mobileorchard.com/hold-and-copy-in-uikit/ –

+0

ट्यूटोरियल बिल्कुल वही है जो मुझे चाहिए, लेकिन आप "रीसेट" विधियों कोड को जोड़ना भूल गए हैं। धन्यवाद! – AlBeebe

उत्तर

6

मैं कहूंगा कि मेरे पास एवर नहीं है, लेकिन मैंने कुछ पोकिंग किया और अधिक पाया। CopyPasteTile

कि कोड मेरी सिम्युलेटर पर काम करता है और इस प्रकार है:: मुझे यकीन है कि आप पहले से ही इस देखा है हूँ

CGRect drawRect = [self rectFromOrigin:currentSelection inset:TILE_INSET]; 
[self setNeedsDisplayInRect:drawRect]; 

UIMenuController *theMenu = [UIMenuController sharedMenuController]; 
[theMenu setTargetRect:drawRect inView:self]; 
[theMenu setMenuVisible:YES animated:YES]; 

यहाँ कुछ अंतर हैं:

  • drawRect एक विशाल दृश्य टाइल और टैप पॉइंट गणना से गणना की जाती है
  • setNeedsDisplayInRect
  • self एक है बड़ी स्क्रीन आकार देखने के लिए, आप स्थानीय coords की बजाय स्क्रीन coords आवश्यकता हो सकती है (आप शायद उस self.superview से प्राप्त कर सकते हैं)

मैं पहला उदाहरण से मेल खाते हैं और देखने के लिए इन समायोजन करने की कोशिश करता हूँ प्रगति की किस तरह यह मुझसे हो जाता है।

+0

aaahhh, दिलचस्प! इसे एक शॉट देगा, धन्यवाद ;-) –

+0

बिंगो, आपके प्रत्येक सुझाव की कोशिश की, और विजेता 'चयनRect = [[सुपर व्यू] फ्रेम] सेट कर रहा था। एक पूर्ण कार्य उदाहरण लिखेंगे और इसे जल्द ही यहां लिंक करेंगे। धन्यवाद! –

+0

सुनकर खुशी हुई कि आपको यह तय हो गया है :) – slf

संबंधित मुद्दे