Search code examples
iosobjective-cvalidationnsurlphone-number

objective c - How to tell if an NSURL is formatted as a phone number


I have an iOS app with a UITextView that auto detects links and phone numbers. What I want to do is intercept when a link is clicked using this:

-(BOOL)textView:(UITextView *)textView shouldInteractWithURL:(NSURL *)URL inRange:(NSRange)characterRange

and then I need to check whether the URL is a web link or a phone number.

Does anyone have any idea how to do this? The only way I can think of is to convert it to a string and check if it starts with @"tel" but there has to be a better way. Thanks!


Solution

  • There IS a better way.

    An NSURL object has an attribute of scheme, which will identify what type of URL it is.

    if ([URL.scheme isEqualToString:@"tel"]) {
         // handle telephone case here
    } else {
        // handle http or other case here
    }
    

    The documentation says the scheme could be considered the protocol in most cases:

    NOTE

    The term “protocol” is also sometimes used when talking about network-based URL schemes. However, not all URL schemes are networking protocols—data:// URLs, for example.

    Check this section of the NSURL docs for more information about how to split apart the URL to use the parts you need: Accessing the Parts of the URL (valid link as of 5/21/15)